Bash对sudo的有条件使用
因此,我有一个bash脚本,它可能需要使用sudo运行一些命令,具体取决于它所使用的版本。我提出了几个选择,但我想我正在寻找更多的建议。下面是我正在做的一个示例脚本: 对每个命令的版本进行条件检查 使用eval 该脚本将始终由user1运行。无论版本如何,有些命令都需要作为user1运行。只有在更高版本中,命令子集才需要作为user2运行Bash对sudo的有条件使用,bash,eval,sudo,Bash,Eval,Sudo,因此,我有一个bash脚本,它可能需要使用sudo运行一些命令,具体取决于它所使用的版本。我提出了几个选择,但我想我正在寻找更多的建议。下面是我正在做的一个示例脚本: 对每个命令的版本进行条件检查 使用eval 该脚本将始终由user1运行。无论版本如何,有些命令都需要作为user1运行。只有在更高版本中,命令子集才需要作为user2运行 我喜欢eval,因为我可以检查一次,然后将变量添加到必要的命令中。我不喜欢eval,因为它看起来有点危险,而且感觉很恶心。但我还没有想出更好的解决办法。任何输
我喜欢eval,因为我可以检查一次,然后将变量添加到必要的命令中。我不喜欢eval,因为它看起来有点危险,而且感觉很恶心。但我还没有想出更好的解决办法。任何输入?您所采用的
eval
方法都很好,但您不需要使用eval
,只需删除run\u as
变量周围的引号,并按如下方式执行:
$run_as cp /tmp/file.txt /data/application/files/file.txt
run_as=(sudo -u user2)
"${run_as[@]}" cp /tmp/file.txt /data/application/files/file.txt
Bash将插入
$run\u的值作为
,并创建一个字符串,然后解释器将尝试执行该字符串。或者更好地使用如下数组:
$run_as cp /tmp/file.txt /data/application/files/file.txt
run_as=(sudo -u user2)
"${run_as[@]}" cp /tmp/file.txt /data/application/files/file.txt
它将解释命令我要了!我想我已经习惯于引用我的bash变量了,我甚至都没想过尝试一下。。。。但话说回来,为什么$run_as命令有效,而“$run_as”命令无效?