Bash
為什麼說readlink沒有這樣的文件或目錄
我正在創建一個 bash 函式,如果指定的符號連結引用指定的目標,則該函式應返回 true/false。我基於https://unix.stackexchange.com/a/192341/40237
但是,我無法
readlink
按自己的意願上班:is_symlink_to () { # $1 = symlink / $2 = symlink target echo "arg1: $1 and arg2: $2" echo readlink arg 1 is: $(readlink -v $1 ) # -v for troubleshooting if [ "$(readlink -- $1)" = $2 ]; then echo "$1 is a symlink to $2" return 0; else return 1; fi } ... if is_symlink_to "~/$file" "$dir/$file" ; then echo "is already symlinked" else ... fi
問題:為什麼會
readlink -v
返回No such file or directory
?arg1: ~/.bash_profile and arg2: /home/me/dotfiles/.bash_profile readlink: '~/.bash_profile': No such file or directory readlink arg 1 is:
如果我
readlink
從 bash shell 執行,它可以正常工作:me@mango:~/dotfiles$ readlink -v ~/.bash_profile /home/me/dotfiles/.bash_profile
正如@UmairKhan 所指出的,波浪號擴展在雙引號內不起作用,所以聲明
if is_symlink_to "~/$file" "$dir/$file" ; then
將在目前目錄中
.bash_profile
的一個目錄中查找文件(在您的範例中) ,而不是在您的主目錄中。~
如果您只將實際的“bash 變數部分”括在括號中,它應該可以工作,如
if is_symlink_to ~/"$file" "$dir/$file"; then
儘管完全省略第一個參數周圍的雙括號也可以 (
is_symlink_to ~/$file "$dir/$file"
) ,但這並不可取,因為它可能會偶然發現帶有特殊字元的文件名。