Bash对sudo的有条件使用

Bash对sudo的有条件使用,bash,eval,sudo,Bash,Eval,Sudo,因此,我有一个bash脚本,它可能需要使用sudo运行一些命令,具体取决于它所使用的版本。我提出了几个选择,但我想我正在寻找更多的建议。下面是我正在做的一个示例脚本: 对每个命令的版本进行条件检查 使用eval 该脚本将始终由user1运行。无论版本如何,有些命令都需要作为user1运行。只有在更高版本中,命令子集才需要作为user2运行 我喜欢eval,因为我可以检查一次,然后将变量添加到必要的命令中。我不喜欢eval,因为它看起来有点危险,而且感觉很恶心。但我还没有想出更好的解决办法。任何输

因此,我有一个bash脚本,它可能需要使用sudo运行一些命令,具体取决于它所使用的版本。我提出了几个选择,但我想我正在寻找更多的建议。下面是我正在做的一个示例脚本:

对每个命令的版本进行条件检查 使用eval 该脚本将始终由user1运行。无论版本如何,有些命令都需要作为user1运行。只有在更高版本中,命令子集才需要作为user2运行


我喜欢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”命令无效?