Bash脚本|| sed命令



我试图在一行前添加#,如果字符串得到匹配。字符串将由用户读取。直接的sed命令对我来说很好,但是当用户读取命令时,它会抛出错误:

server cust01-stg01-ins01-wfm13-bck-610358970-22.int.stg.mykronos.com:80 resolve max_fails=0;
server cust01-stg01-ins01-wfm13-bck-610358970-25.int.stg.mykronos.com:80 resolve max_fails=0;
server cust01-stg01-ins01-wfm13-bck-610358970-21.int.stg.mykronos.com:80 resolve max_fails=0;
server cust01-stg01-ins01-wfm13-bck-610358970-23.int.stg.mykronos.com:80 resolve max_fails=0;
server cust01-stg01-ins01-wfm13-bck-610358970-24.int.stg.mykronos.com:80 resolve max_fails=0;

现在假设用户想用匹配的字符"cust01-stg01-ins01-wfm13-bck-610358970-22"注释行,那么期望下面的输出

#server cust01-stg01-ins01-wfm13-bck-610358970-22.int.stg.mykronos.com:80 resolve max_fails=0;
server cust01-stg01-ins01-wfm13-bck-610358970-25.int.stg.mykronos.com:80 resolve max_fails=0;
server cust01-stg01-ins01-wfm13-bck-610358970-21.int.stg.mykronos.com:80 resolve max_fails=0;
server cust01-stg01-ins01-wfm13-bck-610358970-23.int.stg.mykronos.com:80 resolve max_fails=0;
server cust01-stg01-ins01-wfm13-bck-610358970-24.int.stg.mykronos.com:80 resolve max_fails=0;

sudo sed -i "/cust01-stg01-ins01-wfm13-bck-610358970-23/s/^/#/" wfm_backend_nginx.state

这对我来说工作得很好,但是当我尝试下面的命令时,它会抛出错误。

[root@cust01-stg01-ins01-wfm13-bck-ilb1-610358970 tmp]# cat ilb_commnet.sh
#!/bin/bash -xe
sudo read -p "enter host_name :" Host
sudo sed -i -e "/${Host}/s/^/#/" /tmp/wfm_backend_nginx.state

输出为:

sed: -e expression #1, char 0: no previous regular expression
sudo read -p "enter host_name :" Host

sudo运行一个单独的进程,它将读取输入并将其保存到Host。然后进程将退出,破坏整个环境的读取值。

删除sudo-读取当前进程中的值

在这里使用sudo完全是疯狂的。您正在特权子shell中运行read,然后该子shell退出并带走该变量,然后才能将其用于任何操作。

…实际上,sudo read只是一个语法错误,因为sudo不能运行内置的shell。它试图寻找/usr/bin/read,/bin/read等,但没有找到任何东西。

bash$ sudo read -p hello
sudo: read: command not found

即使没有sudo,您的代码也应该在尝试将变量传递给特权命令之前检查该变量。比如

#!/bin/bash -xe
while true; do
read -p "Enter host name: " Host
case $Host in
*[!A-Za-z0-9]*) echo "$0: Invalid characters in host name" >&2;;
*) break
esac
done
sudo sed -i -e "/${Host}/s/^/#/" /tmp/wfm_backend_nginx.state

相关内容

  • 没有找到相关文章

最新更新