cela peut sembler étrange pour vous, mais je veux exécuter une commande dans un dossier spécifique sans changer le dossier actuel dans le shell. Exemple - voici ce que je fais habituellement:
~$ cd .folder
~/.folder$ command --key
~/.folder$ cd ..
~$ another_command --key
Bien que je veuille quelque chose comme ça:
~$ .folder command --key
~$ another_command --key
C'est possible?
Si vous voulez éviter le second cd
, vous pouvez utiliser
(cd .folder && command --key)
another_command --key
Sans cd
... Pas une seule fois. J'ai trouvé deux moyens:
# Save where you are and cd to other dir
pushd .folder
command --key
# Get back where you were at the beginning.
popd
another_command --key
et deuxieme:
find . -maxdepth 1 -type d -name ".folder" -execdir command --key \;
another_command --key
J'avais besoin de le faire d'une manière exempte de bash, et j'ai été surpris qu'il n'y ait pas d'utilitaire (similaire à env(1)
ou Sudo(1)
qui exécute une commande dans un répertoire de travail modifié. J'ai donc écrit un simple programme C qui le fait:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
char ENV_PATH[8192] = "PWD=";
int main(int argc, char** argv) {
if(argc < 3) {
fprintf(stderr, "Usage: in <dir> <cmd> [<args>...]\n");
return 1;
}
if(chdir(argv[1])) {
fprintf(stderr, "Error setting working directory to \"%s\"\n", argv[1]);
return 2;
}
if(!getcwd(ENV_PATH + 4, 8192-4)) {
fprintf(stderr, "Error getting the full path to the working directory \"%s\"\n", argv[1]);
return 3;
}
if(putenv(ENV_PATH)) {
fprintf(stderr, "Error setting the environment variable \"%s\"\n", ENV_PATH);
return 4;
}
execvp(argv[2], argv+2);
}
L'usage est comme ça:
$ in /path/to/directory command --key