380 votes

Comment pour exécuter un programme avec un répertoire de travail différent du courant, du shell Linux ?

À l'aide d'un shell Linux, comment puis-je commencer un programme avec un répertoire de travail différent à partir du répertoire de travail actuel?

Par exemple, j'ai un fichier binaire helloworld qui crée le fichier hello-world.txt dans le répertoire courant. Ce fichier se trouve dans le répertoire /a. Actuellement, je suis dans le répertoire /b. Je veux commencer mon programme en cours d'exécution ../a/helloworld et obtenir le hello-world.txt quelque part dans un troisième répertoire /c.

J'ai pensé qu'il est possible de le faire avec env de commandement, mais je ne pouvais pas trouver comment faire.

609voto

David Schmitt Points 29384

Appeler le programme comme ceci:

 (cd /c; //helloworld)

Les parenthèses à cause d'un sous-shell pour être généré. Ce sous-shell puis change son répertoire de travail pour /c, puis exécute helloworld de /a. Après les sorties de programme, le sous-shell se termine, vous retourner à l'invite du shell parent, dans le répertoire que vous avez commencé à partir.

Erreur de manipulation: éviter D'exécuter le programme sans avoir changé le répertoire, par exemple en ayant mal orthographié /c, de rendre l'exécution de helloworld condition:

 (cd /c & & //helloworld)

La réduction de l'utilisation de la mémoire: afin D'éviter que le shell interne est exécuté déchets mémoire alors bonjour tout le monde s'exécute, appel helloworld via exec:

 (cd /c && exec /a/helloworld)

[Merci à Josh et Juliano pour donner des conseils sur l'amélioration de cette réponse!]

104voto

Juliano Points 13802

Semblable à David Schmittde répondre, plus la suggestion de Josh, mais ne laisse pas une course de processus shell :

De cette façon est plus semblable à la façon dont vous exécutez généralement des commandes sur la coque. Pour voir la différence pratique, vous devez exécuter `` dans un autre shell avec chaque solution.

20voto

mihi Points 3476

sh - c "cd/c & &... / a/helloworld '

11voto

Luther Blisset Points 21

Je pense toujours à outils UNIX doivent être écrits comme des filtres, lecture d’entrée de sortie stdin et écriture vers stdout. Si possible, vous pouvez changer votre helloworld binaire pour écrire le contenu du fichier texte dans stdout plutôt qu’un fichier spécifique. De cette façon, vous pouvez utiliser le shell d’écrire vos fichiers n’importe où.

$ cd ~/b

$ ~/a/helloworld > ~/c/helloworld.txt

4voto

Jin Kim Points 2529

Une façon de faire qui consiste à créer un script shell.

Le script shell changerait le répertoire en cours à/c, puis exécutez/a/helloworld. Une fois que les sorties de script shell, le répertoire en cours revient à/b.

Voici un exemple de script shell bash :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X