मुझे इसे बाश-मुक्त तरीके से करने की आवश्यकता थी, और आश्चर्य था कि कोई उपयोगिता नहीं है (समान है env(1)
या sudo(1)
जो संशोधित कार्यशील निर्देशिका में एक कमांड चलाता है। इसलिए, मैंने एक सरल सी प्रोग्राम लिखा है जो यह करता है:
#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
?