[英]Linux shell su -c 'sed' command
$ sudo su - root -c 'sed -i '$a\PermitRootLogin yes' etc/ssh/sshd_config'
运行命令后,它总是显示
sed: -e expression #1, char 2: extra characters after command
和
$ sudo su - root -c "sed -i '$a\PermitRootLogin yes' etc/ssh/sshd_config"
会显示
sed: -e expression #1, char 20: unterminated address regex
我应该如何修改它?
单引号不嵌套。 由于您在 sed 命令中有单引号,因此对外部集合使用双引号。 然后确保转义\\$a
以便它不会被解释为名为$a
的shell变量。
sudo su - root -c "sed -i '\$a\\PermitRootLogin yes' /etc/ssh/sshd_config"
不过,您可以通过摆脱整个su -
业务来避免报价问题。 sudo
已经为您提供了 root 访问权限,无需将其与su
结合使用。 一旦你这样做了,你就不再需要两组引号,问题就完全消失了。
sudo sed -i '$a\PermitRootLogin yes' /etc/ssh/sshd_config
顺便说一句,如果您只想添加一行文本,sed 会有点笨手笨脚。 它将原始文件复制到一个临时文件中,将行添加到副本中,然后将原始文件替换为副本。 您可以通过使用>>
或tee -a
来避免这种开销,这两种方法都会将行附加到位,而无需进行所有复制。
sudo sh -c 'echo "PermitRootLogin yes" >> /etc/ssh/sshd_config'
sudo tee -a /etc/ssh/sshd_config <<< 'PermitRootLogin yes' > /dev/null
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.