Comment créer une instruction en ligne de commande (unix / linux) utilisant des variables pour exécuter de nombreuses commandes?
-
09-06-2019 - |
Question
Je dois réorganiser du contenu dans différents répertoires, mais c'est un peu pénible. Afin de déboguer l'application sur laquelle je travaille (une application ruby), je dois déplacer mes gemmes dans mon dossier de gemmes une à la fois (longue histoire; bref, une application est cassée et je ne peux pas trouver laquelle).
Je dois donc faire quelque chose comme:
sudo mv backup/gem/foo gem/
sudo mv backup/doc/foo doc/
sudo mv backup/specification/foo.gemspec specification/
remplacement de " foo " chaque fois. Comment puis-je créer un script shell simple pour me permettre de faire quelque chose comme: gemMove ("foo") et que cela m’apporte des blancs?
La solution
placez les éléments suivants dans un fichier nommé 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
puis faites
chmod a+x gemmove
puis appelez 'sudo gemmove foo' pour déplacer le foo gem des répertoires de sauvegarde vers les répertoires réels
Autres conseils
Vous pouvez simplement utiliser les arguments du shell bash, comme ceci:
#!/bin/bash
# This is move.sh
mv backup/gem/$1 gem/
mv backup/doc/$1 doc/
# ...
puis exécutez-le en tant que:
sudo ./move.sh foo
Assurez-vous que le script est exécutable avec
chmod +x move.sh
dans Bash, quelque chose comme:
function gemMove()
{
filename=$1
mv backup/gem/$filename gem/$filename
mv backup/doc/$filename doc/$filename
mv backup/specification/$filename.spec specification
}
alors vous pouvez simplement appeler gemMove ("foo")
ailleurs dans le script.