pwdをシンボリックリンクされたディレクトリの実際のパスに変更するにはどうすればよいですか?


83

これはかなり基本的な* nixの質問です:

次のシンボリックリンクの作成が与えられます。

ln -s /usr/local/projects/myproject/ myproject

...私のホームディレクトリ/ home / jvf /から、myprojectシンボリックリンクを入力すると、pwd / home / jfv / myproject /が表示されます。ここで、シンボリックリンクしたディレクトリの親ディレクトリを入力したいのですが、cd ..コマンドを実行すると、ホームディレクトリ/ home / jfv /にしか戻りません。とにかく、入力したシンボリックリンクトレイルをエスケープして、代わりにmyprojectディレクトリの実際のパスに等しいpwdを設定することはできますか?つまり、pwdを/ home / jfv / myproject /から/ usr / local / projects / myproject /に変更しますか?

ありがとう:)

回答:


142

-P(物理)フラグを使用するだけです:

pwd -P

cd -P ..

7

次のことをすれば大丈夫です。

1)まず、シンボリックリンクをたどります。

[jfv@localhost ~]$ cd myproject

2)次に、次のコマンドを実行します。

[jfv@localhost myproject]$ cd -P ./

3)これで、現在地を確認でき、物理ディレクトリにいることがわかります。

[jfv@localhost myproject]$ pwd

出力は次のようになります。

/usr/local/projects/myproject

これで、あなたがすることはすべてローカルであり、シンボリックリンク上ではありません。


3

プログラム的には、getcwdライブラリ関数を使用してこれを行います。

#include <unistd.h>
#include <stdio.h>

int main(int argc, char **argv)
{
    char buf[1024*1024L];
    char *cwd;

    cwd = getcwd(buf, sizeof buf);
    if (cwd == NULL) {
        perror("getcwd");
        return 1;
    }
    printf("%s\n", cwd);
    return 0;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.