2008-09-03 20 views
1

Je voudrais exécuter une commande de système d'exploitation de mon manuscrit de ruby ​​mais je veux ajouter un argument d'une variable de ruby.est-il possible de concatuer des arguments à une ligne de commande en utilisant des backquotes?

Je sais que cela est possible en utilisant le système mot-clé comme ça:

#!/usr/bin/env ruby 
directory = '/home/paulgreg/' 
system 'ls ' + directory 

mais est-ce possible en utilisant les « backquotes ou » syntaxe des apostrophes inverses? (je veux dire en utilisant cette syntaxe: ls)

Répondre

6

Non, ce sera juste concaténer la sortie de ls et le contenu de directory.

Mais vous pouvez le faire:

#!/usr/bin/env ruby 
directory = '/home/paulgreg/' 
`ls #{directory}` 
6
`ls #{directory}` 

n'est pas très sûr parce que vous allez rencontrer des problèmes avec les noms de chemins qui ont des espaces en eux.

Il est plus sûr de faire quelque chose comme ceci:

directory = '/home/paulgreg/' 

args = [] 
args << "/bin/ls" 
args << directory 

system(*args) 
+0

comment pourriez-vous lire la sortie de l'appel système? –

1

Nick a raison, mais il n'y a pas besoin de monter le args par morceaux:

directory = '/Volumes/Omg a space/' 
system('/bin/ls', directory)