gpt4 book ai didi

Bash 有条件地使用 sudo

转载 作者:行者123 更新时间:2023-12-03 23:15:40 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com