C
私のプロジェクトディレクトリを変更する簡単なプログラムを作成したいと思います。その内容は次のとおりです。
#include <unistd.h>
int main()
{
chdir("/home/enedil/projects/algo");
return 0;
}
次のコマンドでコンパイルしました(pro.c
ファイル名はです)。
gcc pro.c -o /usr/local/bin/pro
エラーや警告はありません。しかし、実行してみるとそうです。いいえディレクトリを変更します。なぜ?
答え1
あなたのプログラムはあなたの指示に従って正確に行われます。つまり、作業ディレクトリを変更します。それ自体到着する/home/enedil/projects/algo
。でも、いったん出たら、シェル作業ディレクトリが復元されました。
私の考えでは、あなたが達成したいのは簡単ですcd
。方法しかし、著者が言ったようにしないでください。
答え2
現在の作業ディレクトリは、プロセスのローカルディレクトリです。したがって、あなたが望むことは不可能です。
答え3
シェルでこれを行うには、次のようにします。source
コマンド(エイリアス.
)。新しいシェルコンテキストを作成する代わりに、現在のシェルのコンテキストでアプリケーションを実行します。環境変数を設定する方法でもあります。/etc/rc.d
すべての起動スクリプトを確認するか、/etc/init.d
他のスクリプトによってそのコマンドに多くのスクリプトが含まれていることがわかります。
. /etc/init.d/rcvars
これにより、.
スクリプト/etc/init.d/rcvars
に対するすべての変更が現在の環境に残ります。
答え4
CDPATH
環境変数を使用することもできます。説明したようにman bash
:
CDPATH The search path for the cd command. This is a colon-separated
list of directories in which the shell looks for destination
directories specified by the cd command. A sample value is
".:~:/usr".
たとえば、次の行を次の行に追加できます~/.profile
。
CDPATH=~/projects
今、cd projects
すべてのディレクトリで実行します~/projects
。