Linuxのシェルのsu -c 'のsed' コマンド

ピュアカラー:
$ 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

どのように私はそれを修正する必要がありますか?

ジョンKugelman:

単一引用符は、巣をしません。あなたはsedコマンドで単一引用符を持っているので、外側のセットのための二重引用符を使用します。その後脱出することを確認し\$a、それが名前のシェル変数として解釈されていないので$a

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

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=6739&siteId=1