2012-03-24 13 views
0

Ich versuche ein Bash-Skript zu erstellen, das nach einem Verzeichnis fragt, dann fragt nach Optionen (beide mit Dialogfeldern), aber ich kann nicht scheinen, es zu bekommen Arbeit.Wie man einen Befehl und Optionen in separaten Variablen in bash speichert

Wenn das Verzeichnis $directory ist und die Optionen gespeichert werden als $options nahm ich den Befehl wäre:

ls $options $directory

Aber bisher nicht funktioniert hat. Der Befehl schlägt fehl, da er versucht, die Optionen als Verzeichnisse auszuführen. Teil des Problems scheint zu sein, dass die Eingabe von einer Checkliste mit doppelten Anführungszeichen zurückkommt, aber ich bin unsicher, wie man sie entfernt. Auch, wenn ich laufe:

ls "-A" ~

dann der Befehl fein läuft, aber durch den Bash-Skript (und I'v überprüfte den Debugger) genau die gleiche Linie fehl, entweder unter Verwendung von Variablen oder als Hardcoded Linie.

Fehle ich etwas offensichtlich? Ich kann den tatsächlichen Code, den ich benutzt habe, veröffentlichen, wenn das hilft.

+1

Ja, zeigen Sie uns Ihr Code: Sie können es, wie dieses Ziel zu erreichen. –

Antwort

-1

Sie könnten $ 0 und $ 1 verwenden (Es könnte auch $ 1 und $ 2 sein, ich vergesse) $ 1 wäre der erste Parameter. In deinem Fall wäre es das Wörterbuch. EX: ls Auto

0

Es könnte sein, dass Sie Probleme mit der Tilde-Erweiterung haben. Verwenden Sie eval für die Variable, um die Ersetzung zu ermöglichen.

#!/bin/bash 
options="-A" 
directory="~" 
directory=`eval "echo $directory"` 
ls $options $directory 
1

sieht es so aus, als müssten Sie "" loswerden.

options3=${options3:1} 
options3=${options3%?} 

oder

options3=`eval echo $options3` 

#!/bin/bash 

directory=$2 
options=$1 
options2="-l" 
options3="\"-l\"" 

# correct 
#echo "options: $options" 
#ls $options $directory 

#echo 
#echo 

# correct 
#echo "options: $options2" 
#ls $options2 $directory 

#echo 
#echo 

# incorrect 
# echo "options: $options3" 
# ls $options3 $directory 

# correct 
options3=${options3:1} 
options3=${options3%?} 
echo "options: $options3" 
ls $options3 $directory 

# correct 
options3=`eval echo $options3` 
ls $options3 $directory 
+0

Funktioniert das, wenn das Kontrollkästchen mehrere Optionen zurückgibt? I.e. wenn '$ options =" ​​- A "" -l "' usw. –

+0

sollte es funktionieren, zumindest das letzte Beispiel. Warum versuchst du es nicht selbst? Optionen = "\" - l \ "\ "- a \"" echo $ optionen3 'optionen3 =' eval echo $ options3' echo $ optionen3 ls $ optionen3 $ Verzeichnis – wisent

+0

Ich habe etwas verwirrt mit Formatierungscode im vorherigen Kommentar. Verwenden Sie einfach 'eval echo $ options', um die doppelten Anführungszeichen loszuwerden, sollte mit mehreren Optionen arbeiten – wisent