이상하게 보일 수도 있지만 쉘의 현재 폴더를 변경하지 않고 특정 폴더에서 명령을 실행하고 싶습니다. 예-이것이 내가 일반적으로하는 일입니다.
~$ cd .folder
~/.folder$ command --key
~/.folder$ cd ..
~$ another_command --key
나는 이것과 같은 것을 원하지만 :
~$ .folder command --key
~$ another_command --key
가능합니까?
이상하게 보일 수도 있지만 쉘의 현재 폴더를 변경하지 않고 특정 폴더에서 명령을 실행하고 싶습니다. 예-이것이 내가 일반적으로하는 일입니다.
~$ cd .folder
~/.folder$ command --key
~/.folder$ cd ..
~$ another_command --key
나는 이것과 같은 것을 원하지만 :
~$ .folder command --key
~$ another_command --key
가능합니까?
답변:
두 번째를 피하고 싶다면 cd
사용할 수 있습니다
(cd .folder && command --key)
another_command --key
;
에를 &&
좋은 측정을 위해. CD가 실패하면 (예 : 디렉토리 이름을 입력하여) 명령을 실행하고 싶지 않을 수 있습니다.
나는 이것을 bash-free 방식으로해야 할 필요가 있었고 수정 된 작업 디렉토리에서 명령을 실행 env(1)
하거나 유사한 유틸리티가 없다는 것에 놀랐다 sudo(1)
. 그래서 나는 그것을하는 간단한 C 프로그램을 작성했다.
#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);
}
사용법은 다음과 같습니다.
$ in /path/to/directory command --key
~/.folder/command --key
없습니까? 는 않는command
것으로 현재 디렉토리를 필요로~/.folder
?