尝试在 eval 语句中使用 sed?

尝试在 eval 语句中使用 sed?

尝试在 eval 语句中使用 sed?

#!/bin/bash
declare COMMAND="sudo sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config"
theResponse=$(${COMMAND} 2>&1)
echo "${theResponse}"

我似乎无法弄清楚为什么上面的脚本会生成以下错误......

sed:-e 表达式 #1,字符 1:未知命令:“”

sed 命令通过 shell 可以正常工作。

答案1

变量不适合存储命令。为此使用函数(必要时)。以下是如何更地道地编写您的脚本

#!/bin/bash
fixSshd() {
    sudo sed -i 's/^PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config
}

fixSshd

如果您的脚本将由 root 用户运行,则删除sudo.

如果您想捕获命令的错误输出,请将上次替换为此

response=$(fixSshd 2>&1)
echo "Response is: $response"

相关内容