Bash 有条件地使用 sudo

标签 bash eval sudo

所以我有一个 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/

相关文章:

bash - awk 如果第 n 列值乘以 X 大于 Y

linux - 如何在没有密码的情况下以另一个用户身份运行脚本?

macos - Sudoers 语法错误

linux - debian linux sed无法正确地附加字符串/单词

linux - awk 忽略打印单列。 sh-c

javascript - 使用对象选择要运行的函数(动态)

function - 在 dolist 中扩展宏

javascript jquery 和使用 eval

python - 以 root 身份在 Eclipse 中运行 Python 项目

linux - 获取许多相似字符串中的第一个