[英]Bash scripting || sed command
如果字符串匹配,我正在尝试在一行前面添加#。 字符串将由用户读取。 直接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"
,那么下面是 output
#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
Output 是:
sed: -e expression #1, char 0: no previous regular expression
sudo read -p "enter host_name:" Host
sudo
运行一个单独的进程,它将读取输入并将其保存到Host
中。 然后进程将退出,用读取的值破坏整个环境。
删除sudo
- 读取当前进程中的值。
在这里使用sudo
完全是疯狂的。 您正在一个特权子 shell 中运行read
,然后它会退出并带上变量,然后您才能将它用于任何事情。
...实际上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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.