ln 抱怨找不到该文件或目录。

6

我是在macOS上进行shell编程的新手,遇到了一些问题。我写了以下shell脚本:

#!/bin/sh

function createlink {
source_file=$1

target_file="~/$source_file"

if [[ -f $target_file ]]; then
    rm $target_file
fi

ln $source_file $target_file
}

createlink ".netrc"

执行此脚本时,我收到“ln: ~/.netrc: No such file or directory”消息,不知道为什么会出现这种情况!您是否看到了错误?谢谢!


如果在您的主目录中运行此脚本,它将首先使用 rm 命令删除指定的文件,然后尝试链接到不存在的文件。使用 if [[ $PWD == $HOME ]] ; then echo "error message"; exit 1; fi 可以帮助您避免这种情况。 - msw
1个回答

7
问题在于变量值中的路径不会发生波浪线扩展(波浪线扩展发生在变量扩展之前)。您可以通过使用$HOME而不是~来改善此问题。即:
target_file="${HOME}/${source_file}"

这应该可以解决你的问题。
更多阅读: man bashEXPANSION 部分。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接