Tôi có nhu cầu thực hiện việc này theo cách không có bash, và thật ngạc nhiên là không có tiện ích nào (tương tự env(1)
hoặc sudo(1)
chạy lệnh trong thư mục làm việc đã sửa đổi. Vì vậy, tôi đã viết một chương trình C đơn giản thực hiện:
#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);
}
Cách sử dụng là như thế này:
$ in /path/to/directory command --key
~/.folder/command --key
? Cócommand
yêu cầu thư mục hiện tại của bạn phải~/.folder
không?