私は次のディレクトリ構造を持っています:
misha@misha-lmd:~/tmp$ ls -l
total 4.0K
-rw-r--r-- 1 misha lmd 21 Feb 18 21:00 hello.py
lrwxrwxrwx 1 misha lmd 20 Feb 18 21:01 symlink -> /home/misha/nobackup/
次に、私は次のことを試みます:
misha@misha-lmd:~/tmp$ cd symlink
misha@misha-lmd:~/tmp/symlink$ cat ../hello.py
cat: ../hello.py: No such file or directory
なぜこれが機能しないのですか?
代わりにこれを行う場合:
misha@misha-lmd:~/tmp/symlink$ cd ..
misha@misha-lmd:~/tmp$ cat hello.py
print "Hello World!"
その後、すべてが順調です。cdは適切に処理しますが、catは処理しません。この魔術とは何ですか、そしてどうすれば私が望むように物事を機能させることができますか?
編集
OK、ここでのいくつかの答えのおかげで、私は何が起こっているのかについてもう少し知りました。まず、cd
実際には実行可能ファイルではなく、シェル(この場合はbash)の組み込みコマンドです。
misha@misha-lmd:~/tmp$ type cd
cd is a shell builtin
もしそうならman bash
、ディレクトリの移動を含め、bashがハウスキーピングに使用する環境変数に関するすべてを見つけることができます。のような他のビルトインがあり、pwd
実際に実行可能ファイルである対応物があります。
misha@misha-lmd:~/tmp/symlink$ type pwd
pwd is a shell builtin
misha@misha-lmd:~/tmp/symlink$ /bin/pwd
/home/misha/nobackup
misha@misha-lmd:~/tmp/symlink$ /bin/pwd -L
/home/misha/tmp/symlink
実行可能ファイルは/bin/pwd
デフォルトで物理パスを出力しますが、「-L」スイッチを指定すると論理パスを出力することもできます。同様に、私がやろうとすると:
misha@misha-lmd:~/tmp/symlink$ cat ../hello.py
cat: ../hello.py: No such file or directory
論理的なディレクトリではなく、物理的な親ディレクトリ..
として解釈されているため、問題が発生しています。これにより、質問を次のように絞り込むことができます。
..
実行可能ファイルにコマンドライン引数を指定する場合、物理的な親ではなく、論理的な親を意味するようにするにはどうすればよいですか?