Linux shell su-c';sed';命令
运行命令后,它始终显示Linux shell su-c';sed';命令,linux,shell,Linux,Shell,运行命令后,它始终显示 $ sudo su - root -c 'sed -i '$a\PermitRootLogin yes' etc/ssh/sshd_config' 及 将显示 $ sudo su - root -c "sed -i '$a\PermitRootLogin yes' etc/ssh/sshd_config" 我应该如何修改它?单引号不嵌套。因为sed命令中有单引号,所以对外部集合使用双引号。然后确保转义\$a,这样它就不会被解释为名为$a的shell变量 sed: -e
$ sudo su - root -c 'sed -i '$a\PermitRootLogin yes' etc/ssh/sshd_config'
及
将显示
$ sudo su - root -c "sed -i '$a\PermitRootLogin yes' etc/ssh/sshd_config"
我应该如何修改它?单引号不嵌套。因为sed命令中有单引号,所以对外部集合使用双引号。然后确保转义
\$a
,这样它就不会被解释为名为$a
的shell变量
sed: -e expression #1, char 20: unterminated address regex
不过,您可以通过摆脱整个su-
业务来避免报价问题sudo
已经为您提供了root访问权限,无需将其与su
组合使用。一旦你这样做了,你就不再需要两组引号,问题就完全消失了
sudo su - root -c "sed -i '\$a\\PermitRootLogin yes' /etc/ssh/sshd_config"
顺便说一下,如果您只想添加一行文本,那么sed有点笨手笨脚。它会将原始文件复制到临时文件中,将行添加到副本中,然后用副本替换原始文件。您可以通过使用>
或tee-a
来避免这种开销,这两种方法中的任何一种都将在不进行所有复制的情况下将行追加到位
sudo sed -i '$a\PermitRootLogin yes' /etc/ssh/sshd_config
sudo-tee-a/etc/ssh/sshd\u config
sudo sed -i '$a\PermitRootLogin yes' /etc/ssh/sshd_config
sudo sh -c 'echo "PermitRootLogin yes" >> /etc/ssh/sshd_config'
sudo tee -a /etc/ssh/sshd_config <<< 'PermitRootLogin yes' > /dev/null