1

假设我有一个非常简单的脚本,它在某个目录中创建一个链接,如果它失败则终止该脚本。

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”的输出存储搜索,我假设它在非英语操作系统上会失败。

4

1 回答 1

1

我不知道有什么方法可以对ln退出原因进行分类,或者至少没有任何关于您可以测试的特定退出代码的文档,但是您可以使用标准命令$?测试相关权限:test[

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
于 2013-08-17T18:32:01.093 回答