web-dev-qa-db-fra.com

Comment Bash peut-il exécuter une commande dans un contexte de répertoire différent?

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?

65
Marty Wallace

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.

26
Todd A. Jacobs

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.

167
geekosaur
(cd /path/to/your/special/place;/bin/your-special-command ARGS)
26
bmargulies

Si vous souhaitez revenir à votre répertoire de travail actuel:

current_dir=$PWD;cd /path/to/your/command/dir;special command ARGS;cd $current_dir;
  1. Nous définissons une variable current_dir égal à votre pwd
  2. après cela, nous allons à cd où vous devez exécuter votre commande
  3. alors nous courons la commande
  4. alors nous allons cd revenir à notre variable current_dir

Prendre plaisir

15
abc123