J'ai une commande commune qui est appelée à partir de répertoires très spécifiques. Il n’existe qu’un seul exécutable dans/bin pour ce programme et le répertoire de travail actuel est très important pour l’exécuter correctement. Le script affecte les fichiers qui résident dans le répertoire dans lequel il est exécuté.
Maintenant, j'ai aussi un script Shell personnalisé qui fait certaines choses dans un répertoire, mais je dois appeler la commande mentionnée ci-dessus comme si elle se trouvait dans un autre répertoire.
Comment faites-vous cela dans un script Shell?
Vous pouvez utiliser les fonctions intégrées cd
ou pushd
et popd
à cette fin. Par exemple:
# do something with /etc as the working directory
cd /etc
:
# do something with /tmp as the working directory
cd /tmp
:
Vous utilisez les commandes intégrées comme toute autre commande et pouvez modifier le contexte du répertoire autant de fois que vous le souhaitez dans un script.
Utilisez cd
dans un sous-shell; la manière la plus simple d’utiliser ce type de sous-shell est entre parenthèses.
(cd wherever; mycommand ...)
Cela dit, si votre commande dispose d’un environnement qui lui est nécessaire, elle doit réellement s’assurer que cet environnement lui-même a la charge de tout ce qui pourrait l’utiliser (à moins qu’il s’agisse d’une commande interne utilisée dans des circonstances très spécifiques dans le contexte d’un puits). système défini plus grand, de sorte que tout appelant doit déjà s’assurer de l’environnement dont il a besoin). Il s’agit généralement d’une sorte de wrapper de script shell.
(cd /path/to/your/special/place;/bin/your-special-command ARGS)
current_dir=$PWD;cd /path/to/your/command/dir;special command ARGS;cd $current_dir;
current_dir
égal à votre pwd
cd
où vous devez exécuter votre commandecd
revenir à notre variable current_dir
Prendre plaisir