プロジェクトディレクトリに変更する簡単なC
プログラムを作成したかったのです。その内容は次のとおりです。
#include <unistd.h>
int main()
{
chdir("/home/enedil/projects/algo");
return 0;
}
次のコマンド(pro.c
はそのファイル名です):
gcc pro.c -o /usr/local/bin/pro
エラーも警告もありませんでした。しかし、実行するとnotディレクトリが変更されます。どうして?
あなたのプログラムはあなたが言うように正確に行います:itselfの作業ディレクトリを/home/enedil/projects/algo
に変更します。ただし、終了すると、Shellの作業ディレクトリが復元されます。
達成したいことは、単純なcd
に頼らずに、親プロセス、つまりシェルの作業ディレクトリを変更することだと思います。 メソッド がありますが、その作者が言うように、しないでください。
現在の作業ディレクトリはプロセスに対してローカルです。だから、あなたが望むものは不可能です。
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
に移動できます。
シェルでこれを行うには、 source
コマンドを使用します(エイリアスは.
にエイリアス化されています)。新しいシェルコンテキストを作成するのではなく、現在のシェルのコンテキストでアプリケーションを実行します。これは、環境変数も設定できる方法です。 /etc/rc.d
または/etc/init.d
内のすべての起動スクリプトに気付いた場合は、コマンドを使用して他のスクリプトに含まれている多くのスクリプトが表示されます。
. /etc/init.d/rcvars
.
を使用すると、スクリプト/etc/init.d/rcvars
が実行され、変更内容が現在の環境に保持されます。