é possível concatenar argumentos para uma linha de comando usando crases?
-
09-06-2019 - |
Pergunta
Gostaria de executar um comando do sistema operacional a partir do meu script Ruby, mas quero adicionar um argumento de uma variável Ruby.
Eu sei que isso é possível usando a palavra-chave sistema assim :
#!/usr/bin/env ruby
directory = '/home/paulgreg/'
system 'ls ' + directory
mas isso é possível usando a "sintaxe de crases ou crases"?(Quero dizer, usando essa sintaxe: ls
)
Solução
Não, isso apenas concatenará a saída de ls
e o conteúdo de directory
.
Mas você pode fazer isso:
#!/usr/bin/env ruby
directory = '/home/paulgreg/'
`ls #{directory}`
Outras dicas
`ls #{directory}`
não é muito seguro porque você terá problemas com nomes de caminhos que contenham espaços.
É mais seguro fazer algo assim:
directory = '/home/paulgreg/'
args = []
args << "/bin/ls"
args << directory
system(*args)
Nick está certo, mas não há necessidade de montar os argumentos por partes:
directory = '/Volumes/Omg a space/'
system('/bin/ls', directory)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow