chdir()はシェルを終了した後にディレクトリを変更しません。

chdir()はシェルを終了した後にディレクトリを変更しません。

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

関連情報