shell 脚本注释掉或取消注释一行 - 测试

shell 脚本注释掉或取消注释一行 - 测试

尝试#从文件中的一行中删除一个符号。该行当前

#/usr/bin/tvservice -o
if [[ '$grep tvservice /etc/rc.local' =~ ^# ]] ;
then sed -i '/^#.* tvservice /s/^#//' /etc/rc.local ;
else echo 1 fi

在将此命令添加到脚本之前,尝试测试它是否有效。当我运行它时,我得到一个>符号,必须使用Ctrl+停止执行C

我没有正确传递字符串grep吗?我对此还很陌生。

答案1

我建议你测试一下没有首先是sed 的-i标志 - 或者使用文件的本地副本rc.local

你不需要需要测试字符串是否存在,但如果你这样做,那么正确的方法是替换 grep 的输出将是"$(grep tvservice /etc/rc.local)"- 你编写的方式测试文字字符串$grep tvservice /etc/rc.local

然而,在我看来,更好的方法是针对整个模式进行 grep 并直接使用 grep 的退出状态,从而完全避免 shell 正则表达式测试:

if grep -q '^#.*tvservice' /etc/rc.local; then 
  sed -i '/^#.*tvservice/ s/^#//' /etc/rc.local
else 
  echo 1
fi

(我删除了图案周围的空格,因为您的示例文本没有这些空格)。

相关内容