次の設定を検討してください。
~/Desktop/Public/subdir
~/Desktop/subdir --> ~/Desktop/Public/subdir (symbolic link)
今私はこれをします:
cd ~/Desktop/subdir
これにより、リンクされたディレクトリにリンクされます。
今コマンドを実行すると:
cd ..
私は再びDesktop
ディレクトリに移動します。これは、cdコマンドがコンテキスト・コマンドであることを意味します。つまり、subdir
シンボリックリンクを介して入力したことを覚えています。
ただし、コマンドを実行すると
cp testfile ..
testfile
にコピーされますDesktop/Public
。
私cd
は(通常は予測できない)動作を好みますcp
。とにかく、これらの行動の違いの理由が何であるかを知りたいです。ただレガシー問題なのか、それとも合理的な理由がありますか?
ベストアンサー1
cd
aを介してディレクトリに入ったことを知っているのは、ディレクトリがsymlink
シェルに組み込まれているためです。このcp
コマンドは外部バイナリであり、コマンドライン引数と環境変数を介してのみデータを渡します。環境変数に次のデータが含まれていません。どのように現在のディレクトリを入力しました。
を使用すると、一貫性を維持したいのと同じ機能を実現bash
できます。これを達成します。マンページから:cd
cp
set -P
-P If set, the shell does not follow symbolic links when executing commands such as cd that change the current working directory. It uses the physical directory structure instead. By default, bash follows the
logical chain of directories when performing commands which change the current directory.