Ruby na Linha de Comando: Um Guia Completo para Desenvolvedores
Se você está usando Ruby como linguagem de script ou desenvolvendo aplicações, dominar o uso da linha de comando é essencial. Neste tutorial abrangente, vamos explorar todas as funcionalidades que o interpretador Ruby oferece através da linha de comando, desde opções básicas até ferramentas avançadas como Rake.
Executando Programas Ruby
A forma mais direta de iniciar o interpretador Ruby é chamando o comando ruby seguido do nome do arquivo. A estrutura básica é:
ruby ‹ opções › ‹ -- › ‹ arquivo_programa › ‹ argumentos ›*O exemplo mais simples seria:
$ ruby meu_codigo.rbDetectando Erros de Sintaxe
Quando há erros de sintaxe, Ruby tenta localizar e sugerir onde está o problema. Vamos criar um exemplo com erro:
class TemUmErro
def este_metodo_termina
p "ele certamente termina"
end
def este_nao_termina
return "uma coisa"
# falta o 'end' aqui!
def este_esta_certo
p "perfeito"
end
endRuby mostrará um erro similar a:
syntax error, unexpected end-of-input, expecting 'end' (SyntaxError)Executando Ruby com a Opção -e
A opção -e permite executar uma linha de script diretamente, transformando Ruby em uma poderosa calculadora de linha de comando:
$ ruby -e "p (1..5).map { _1 ** 2 }"
[1, 4, 9, 16, 25]Processando Arquivos com Opções Avançadas
Ruby oferece várias opções poderosas para processar arquivos linha por linha:
Opção -n: Loop Automático
A opção -n envolve seu código em um loop while gets:
$ ruby -ne 'puts "linha: #{$_}"' < arquivo_teste
linha: Esta é a linha um
linha: Esta é a linha dois
linha: Esta é a linha trêsOpção -p: Loop com Impressão Automática
$ ruby -pe '"linha: #{$_}"' < arquivo_testeOpção -a: Divisão Automática
Com -a, cada linha é automaticamente dividida e armazenada em $F:
$ ruby -nae 'puts "linha: #{$F}"' < arquivo_teste
linha: ["Esta", "é", "a", "linha", "um"]
linha: ["Esta", "é", "a", "linha", "dois"]Processando Argumentos da Linha de Comando
Array ARGV
Todos os argumentos após o nome do programa ficam disponíveis no array global ARGV:
# arquivo: teste.rb
ARGV.each { |argumento| p argumento }Executando:
$ ruby -w teste.rb "Olá Mundo" a1 1.6180
"Olá Mundo"
"a1"
"1.6180"Importante: Em Ruby, ARGV[0] é o primeiro argumento para o programa, não o nome do programa. O nome do programa atual está disponível na variável global $0 ou $PROGRAM_NAME.
Objeto ARGF: Múltiplos Arquivos como Stream Único
Ruby fornece o objeto de conveniência ARGF que trata múltiplos arquivos como um único stream:
# Processa múltiplos arquivos linha por linha
while (linha = gets)
printf "%d: %10s[%d] %s",
ARGF.lineno,
ARGF.filename,
ARGF.file.lineno,
linha
endEdição In-Place com ARGF
Ruby permite editar arquivos in-place, mantendo backups. Use a opção -i com extensão de backup:
# reverter.rb - inverte cada linha
while (linha = gets)
puts linha.chomp.reverse
end$ ruby -i.bak reverter.rb arquivo_teste outro_arquivoParsing Avançado de Opções com OptionParser
Para scripts complexos, Ruby fornece a classe OptionParser que permite criar interfaces de linha de comando profissionais:
require "optparse"
parser = OptionParser.new
tipo_ordenacao = nil
# Opções curtas e longas
parser.on("-a", "Alfabético") do
tipo_ordenacao = :alfabetico
end
parser.on("--recente", "Mais Recente") do
tipo_ordenacao = :recencia
end
parser.on("-s", "--tamanho", "Tamanho") do
tipo_ordenacao = :tamanho
end
parser.parse!
p "estamos ordenando por #{tipo_ordenacao}"Opções com Argumentos
parser.on("-dBANCO", "Tipo de Banco de Dados") do |valor|
banco_dados = valor
end
# Argumento opcional (entre colchetes)
parser.on("-a [DIRETORIO]", "Alfabético") do |valor|
diretorio_trabalho = valor || "."
endVariáveis de Ambiente
Ruby permite acessar e modificar variáveis de ambiente através do objeto ENV:
# Acessando variáveis de ambiente
puts ENV['SHELL']
puts ENV['HOME']
puts ENV['USER']
# Modificando variáveis (local ao processo)
ENV['MINHA_VAR'] = 'valor_personalizado'
# Removendo variável (definir como nil)
ENV['VAR_TEMPORARIA'] = nilDominando o Rake: Automação de Tarefas
Rake é uma poderosa ferramenta de automação que vai muito além de um simples build tool. Vamos criar um exemplo prático:
Criando Seu Primeiro Rakefile
# Rakefile
require "fileutils"
desc "Remove arquivos com nomes terminados em til"
task :deletar_backups_unix do
arquivos = Dir["*~"]
rm(arquivos, verbose: true) unless arquivos.empty?
end
desc "Remove arquivos com extensão .bak"
task :deletar_backups_windows do
arquivos = Dir["*.bak"]
rm(arquivos, verbose: true) unless arquivos.empty?
endComposição de Tarefas e Dependências
# Tarefa composta com dependências
desc "Remove backups Unix e Windows"
task deletar_backups: [:deletar_backups_unix, :deletar_backups_windows] do
puts "Todos os backups foram deletados"
end
# Tarefa padrão
task default: :deletar_backupsPassando Argumentos para Tarefas Rake
def deletar(diretorio, padrao)
arquivos = Dir["#{diretorio}/#{padrao}"]
rm(arquivos, verbose: true) unless arquivos.empty?
end
desc "Remove backups Unix em diretório específico"
task :deletar_unix, [:dir] do |tarefa, args|
deletar(args[:dir], "*~")
endExecute com:
$ rake deletar_unix[codigo]Listando Tarefas Disponíveis
$ rake -T
rake deletar_backups # Remove backups Unix e Windows
rake deletar_backups_unix # Remove arquivos com nomes terminados em til
rake deletar_backups_windows # Remove arquivos com extensão .bakCriando Executáveis Ruby
Em sistemas Unix, você pode tornar seus scripts Ruby executáveis diretamente:
Configurando o Shebang
#!/usr/bin/env ruby
# Seu código Ruby aqui
puts "Olá, mundo Ruby executável!"
puts "Argumentos recebidos: #{ARGV}"Torne o arquivo executável:
$ chmod +x meu_script.rb
$ ./meu_script.rb arg1 arg2Configuração do Caminho de Bibliotecas
Ruby determina onde procurar bibliotecas através da variável $LOAD_PATH (também conhecida como $:). Você pode verificar os caminhos atuais:
$ ruby -e 'puts $LOAD_PATH'Para adicionar caminhos personalizados, use:
# Via variável de ambiente
ENV['RUBYLIB'] = '/caminho/para/biblioteca'
# Via linha de comando
# ruby -I /caminho/para/biblioteca meu_script.rb
# Dentro do programa
$: << '/caminho/para/biblioteca'Conclusão
Dominar o uso da linha de comando em Ruby abre um universo de possibilidades para automação, processamento de dados e criação de ferramentas eficientes. As funcionalidades que exploramos - desde opções básicas do interpretador até ferramentas avançadas como Rake e OptionParser - formam a base para criar soluções robustas e profissionais.
Os próximos passos incluem experimentar com estes conceitos em seus próprios projetos, explorando opções mais avançadas do Ruby e Rake, e construindo suas próprias ferramentas de linha de comando. Lembre-se: a prática consistente é a chave para dominar essas poderosas funcionalidades do Ruby.
Nenhum comentário:
Postar um comentário