В моем случае я только что обновил systemd
, и любая команда systemctl
не выполнялась:
# systemctl daemon-reexec
Failed to reload daemon: Access denied
# systemctl status
Failed to read server status: Access denied
Однако, согласно справочной странице init
, вы можете сделать то же самое, отправив SIGTERM
демону, работающему как PID 1, что сработало:
kill -TERM 1
Это перезагрузило демон, после чего все команды systemctl
снова заработали.
Не вводить предоставленные пользователем -данные в скрипт sed
. Это приносит больше проблем, чем пользы, и во многих случаях может быть дырой в безопасности (, особенно с GNU sed
, которая допускает выполнение произвольного кода ). Помните, что вставка $text
в замещающую часть команды s///
фактически изменяет ваш сценарий sed
, используя любую строку $text
.
Если вам просто нужно изменить первую строку на некоторую фиксированную строку, используйте вместо нее awk
:
cp results.txt results.txt.bak &&
awk -v value="$text" 'NR == 1 { $0 = value }; 1' results.txt.bak >results.txt
Тестирование:
$ text='<string name="app_mod_app_crowdin_1">crowdin one es</string>'
$ cat results.txt
line 1
line 2
line 3
$ cp results.txt results.txt.bak && awk -v value="$text" 'NR == 1 { $0 = value }; 1' results.txt.bak >results.txt
$ cat results.txt
<string name="app_mod_app_crowdin_1">crowdin one es</string>
line 2
line 3
Код awk
просто заменяет текущую строку заданным текстом if NR == 1
, т.е. если это первая строка файла. Замыкающий 1
приводит к печати всех строк, независимо от того, изменены они или нет.