web-dev-qa-db-ja.com

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

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

次のシンボリックリンクが作成されたとします。

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

...私のホームディレクトリから/ home/jvf /myprojectと入力すると、シンボリックリンクでpwd / home/jfv/myproject /が得られます。ここで、シンボリックリンクしたディレクトリの親ディレクトリに入りたいのですが、cd ..コマンドを実行しても、ホームディレクトリに戻るだけです/ home/jfv/。とにかく、入力したシンボリックリンクの跡をエスケープする代わりに、pwdがmyprojectディレクトリの実際のパスと等しいかどうかを確認します。つまり、私のパスワードを/ home/jfv/myproject /から/ usr/local/projects/myproject /に変更しますか?

ありがとう:)

79

-P(物理)フラグ:

pwd -P

cd -P ..
131
Cfr

以下を実行すると、大丈夫です。

1)最初にシンボリックリンクをたどります:

[jfv@localhost ~]$ cd myproject

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

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

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

[jfv@localhost myproject]$ pwd

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

/usr/local/projects/myproject

これで、実行するすべての操作はローカルになり、シンボリックリンク上にはありません。

5
DrupalFever

プログラムでこれを行うには、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;
}
3
user25148