Linux shell su - c команда 'sed' - PullRequest
       5

Linux shell su - c команда 'sed'

2 голосов
/ 15 февраля 2020
$ 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

как мне ее изменить?

1 Ответ

3 голосов
/ 15 февраля 2020

Одиночные кавычки не гнездятся. Поскольку у вас есть одинарные кавычки в команде 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...