Shell

cp SOMEFILE .. cd 後通過符號連結複製到不同的目錄

  • July 23, 2013

考慮以下設置:

~/Desktop/Public/subdir
~/Desktop/subdir --> ~/Desktop/Public/subdir (symbolic link)

現在我這樣做:

cd ~/Desktop/subdir

這導致我進入連結目錄。

如果我現在發出命令:

cd ..

我將被移回Desktop目錄。這意味著 cd 命令是上下文相關的——它記得我是subdir通過符號連結輸入的。

但是,發出命令

cp testfile ..

將復製testfileDesktop/Public.

cd我更喜歡cp. 無論如何,我想知道這種行為差異的原因是什麼?只是遺留的東西還是有充分的理由?

cd知道您已經通過 a 進入目錄的原因symlink是因為它是內置在 shell 中的。該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.

引用自:https://unix.stackexchange.com/questions/83966