2008-09-03 3 views
1

Ich möchte einen OS-Befehl aus meinem Ruby-Skript ausführen, aber ich möchte ein Argument aus einer Ruby-Variable hinzufügen.ist es möglich Argumente mit backquotes zu einer Kommandozeile zu verbinden?

Ich weiß, dass durch die Verwendung von Keyword System wie das möglich ist:

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

aber ist das möglich, indem die „einfachen Anführungszeichen oder Backticks Syntax“ mit? (ich meine durch diese Syntax: ls)

Antwort

6

Nein, das die Ausgabe von ls und den Inhalt von directory nur verketten wird.

Aber Sie können dies tun:

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

nicht sehr sicher sind, weil Sie Probleme mit Pfadnamen laufen gehen, die Leerzeichen in ihnen haben.

Es ist sicherer, so etwas zu tun:

directory = '/home/paulgreg/' 

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

system(*args) 
+0

wie würden Sie die Ausgabe von Systemaufruf gelesen haben? –

1

Nick ist richtig, aber es gibt keine Notwendigkeit, die args stückweise zu montieren:

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