所以我有一个 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
使用评估
#!/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
该脚本将始终由 user1 运行。并且无论版本如何,有些命令都需要以 user1 身份运行。只有在更高版本中,一部分命令才需要以 user2 身份运行。
我喜欢 eval 因为我可以检查一次并将变量添加到必要的命令中。我不喜欢 eval,因为它看起来有点危险,而且感觉很恶心。但我还没有想出更好的解决方案。任何输入?
最佳答案
eval
一切正常你已经采取的方法,但你不需要使用 eval
, 只需删除 run_as
周围的引号变量并像这样执行:
$run_as cp /tmp/file.txt /data/application/files/file.txt
Bash 将插入
$run_as
的值并创建一个字符串,然后解释器将尝试执行该字符串。
关于Bash 有条件地使用 sudo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51266773/