2013-08-17 37 views
1

假设我有一个非常简单的脚本,它在某个目录中创建链接,并在脚本失败时终止该脚本。仅当Bash脚本运行到“权限被拒绝”时提示`sudo`

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似乎对失败retun退出代码1,无论它是否符合许可或任何其他错误问题,如目录不存在,所以我不能用它来检测它遇到了哪些问题。

如果我将ln的输出存储为字符串“Permission denied”的搜索,我假设它在非英文操作系统上会失败。

回答

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