奇妙に思えるかもしれませんが、シェルの現在のフォルダーを変更せずに特定のフォルダーでコマンドを実行したいです。例-これは私が通常行うことです:
~$ 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なしの方法で行う必要があり、ユーティリティ(変更された作業ディレクトリでコマンドを実行するのと同じ、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
?