所以我有一个 bash 脚本,根据它所针对的版本,可能需要使用 sudo 运行一些命令。我已经提出了几个选项,但我想我正在寻找其他建议。这是我正在做的事情的示例脚本:
#!/usr/bin/bash
# script is run by "user1"
version="$1"
export version
if [[ "$version" -eq "10" ]]
then
cp /tmp/file.txt /data/application/files/file.txt
elif [[ "$version" -eq "11" ]]
then
sudo -u user2 cp /tmp/file.txt /data/application/files/file.txt
fi
exit 0
Run Code Online (Sandbox Code Playgroud)
#!/usr/bin/bash
# script is run by "user1"
version="$1"
export version
export run_as=""
if [[ "$version" -eq "10" ]]
then
run_as=""
elif [[ "$version" -eq "11" ]]
then
run_as="sudo -u user2"
fi
eval "$run_as" cp /tmp/file.txt /data/application/files/file.txt
exit 0
Run Code Online (Sandbox Code Playgroud)
该脚本将始终由 user1 运行。而且无论版本如何,有些命令都需要以user1身份运行。只有较高版本才需要以 user2 身份运行一部分命令。
我喜欢 eval 因为我可以检查一次并将变量添加到必要的命令中。我不喜欢 eval 因为它看起来有点危险而且感觉很恶心。但我还没有想到更好的解决方案。有什么意见吗?
您采取的方法一切都很好eval,但您不需要使用eval,只需删除变量周围的引号run_as并像这样执行:
$run_as cp /tmp/file.txt /data/application/files/file.txt
Run Code Online (Sandbox Code Playgroud)
Bash 将插入值$run_as并创建一个字符串,然后解释器将尝试执行该字符串。
| 归档时间: |
|
| 查看次数: |
1161 次 |
| 最近记录: |