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