繁体   English   中英

Linux shell su -c 'sed' 命令

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM