2008-09-16 10 views
1

Ich muss einige Inhalte in verschiedenen Verzeichnissen neu anordnen, aber es ist ein bisschen Schmerz. Um die Anwendung zu debuggen, an der ich gerade arbeite (eine Ruby-App), muss ich meine Edelsteine ​​einzeln in meinen Schmuckordner legen (lange Geschichte; kurz gesagt: eine ist kaputt und ich kann nicht herausfinden, welche).Wie kann ich eine Befehlszeile (Unix/Linux) Anweisung erstellen, die Variablen verwendet, um zahlreiche Befehle auszuführen?

Also ich brauche etwas zu tun:

sudo mv backup/gem/foo gem/ 
sudo mv backup/doc/foo doc/ 
sudo mv backup/specification/foo.gemspec specification/ 

"foo" jedes Mal zu ersetzen. Wie kann ich ein einfaches Shell-Skript erstellen, damit ich etwas wie: gemMove ("foo") machen kann und es die Lücken für mich ausfüllt?

Antwort

4

setzen Sie die folgenden in eine Datei mit dem Namen gemmove:

#!/bin/bash 

foo=$1 

if [ x$foo == x ]; then 
    echo "Must have an arg" 
    exit 1 
fi 

for d in gem doc specification ; do 
    mv backup/$d/$1 $d 
done 

dann tun

chmod a+x gemmove 

und rufen Sie dann 'sudo gemmove foo' die foo Juwel aus den Backup-dirs in den realen zu bewegen

+0

Danke! Das hat wunderbar geklappt. – Anutron

1

Sie könnten einfach die bash-Shell Argumente wie folgt verwenden:

#!/bin/bash 
# This is move.sh 
mv backup/gem/$1 gem/ 
mv backup/doc/$1 doc/ 
# ... 

und führen Sie es dann als:

sudo ./move.sh foo 

Seien Sie sicher, dass das Skript ausführbar zu machen, mit

chmod +x move.sh 
1

in bash, so etwas wie:

function gemMove() 
{ 
filename=$1 
    mv backup/gem/$filename gem/$filename 
    mv backup/doc/$filename doc/$filename 
    mv backup/specification/$filename.spec specification 
} 

dann können Sie einfach anrufen gemMove("foo") an anderer Stelle im Skript.

+0

Oder Sie können die Funktion zu Ihrer .bashrc hinzufügen, um sie immer verfügbar zu machen. –