Come posso creare un'istruzione della riga di comando (unix/linux) che utilizza variabili per eseguire numerosi comandi?
-
09-06-2019 - |
Domanda
Ho bisogno di riorganizzare alcuni contenuti in varie directory, ma è un po' una seccatura.Per eseguire il debug dell'applicazione su cui sto lavorando (un'app Ruby) devo spostare le mie gemme nella cartella delle gemme una alla volta (lunga storia;guscio di noce:uno è rotto e non riesco a capire quale).
Quindi devo fare qualcosa del tipo:
sudo mv backup/gem/foo gem/
sudo mv backup/doc/foo doc/
sudo mv backup/specification/foo.gemspec specification/
sostituendo "foo" ogni volta.Come posso creare un semplice script di shell che mi permetta di fare qualcosa del tipo:gemMove("foo") e riempie gli spazi vuoti per me?
Soluzione
inserisci quanto segue in un file chiamato 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
Quindi fa
chmod a+x gemmove
e poi chiama 'sudo gemmove foo' per spostare la gem foo dalle directory di backup a quelle reali
Altri suggerimenti
Potresti semplicemente usare gli argomenti della shell bash, in questo modo:
#!/bin/bash
# This is move.sh
mv backup/gem/$1 gem/
mv backup/doc/$1 doc/
# ...
e quindi eseguirlo come:
sudo ./move.sh foo
Assicurati di rendere eseguibile lo script, con
chmod +x move.sh
in bash, qualcosa del tipo:
function gemMove()
{
filename=$1
mv backup/gem/$filename gem/$filename
mv backup/doc/$filename doc/$filename
mv backup/specification/$filename.spec specification
}
allora puoi semplicemente chiamare gemMove("foo")
altrove nella sceneggiatura.