Comment créer une instruction en ligne de commande (unix / linux) utilisant des variables pour exécuter de nombreuses commandes?

StackOverflow https://stackoverflow.com/questions/74886

  •  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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top