假设我有一个非常简单的脚本,它在某个目录中创建一个链接,并在脚本失败时终止该脚本。
ln -s "/opt/myapp" "${1}/link" || exit 1;
现在它只是在它遇到错误时退出。我想在创建链接时将其更改为,只有当它遇到权限错误时,它才会执行以下行而不是退出:
echo "The target directory requires root privileges to access."
sudo ln -s "/opt/myapp" "${1}/myapp" || exit 1;
我不想提示用户以root身份运行,除非绝对必须这样做。
ln
似乎在失败时重新退出退出代码1,无论是权限问题还是其他任何错误,例如目录不存在,所以我不能用它来检测它遇到的问题
如果我通过ln
的输出存储搜索字符串“Permission denied”,我认为它将在非英语操作系统上失败。
答案 0 :(得分:1)
我不知道有哪些方法可以对ln
退出原因进行分类,或者至少有任何关于您可以使用$?
测试的特定退出代码的文档,但您可以使用标准测试相关权限test
or [
command:
SOURCEFILE="/opt/myapp"
DESTDIR="${1}"
DESTTARGET="${DESTDIR}/myapp"
if [ ! -d "$DESTDIR" -o ! -e "$SOURCEFILE" ]; then
echo "Source file does not exist or destination directory does not exist." >&2
elif [ ! -r "$SOURCEFILE" -o ! -w "$DESTDIR" ]; then
echo "Source file is not readable or destination directory is not writable." >&2
# Run sudo command here
else
# Should work, run command here
fi