Проблема может заключаться в том, что командная строка
sudo echo "test ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
перенаправит вывод команды sudo
, используя личность исходного пользователя для выполнения перенаправления -, и, поскольку вам нужен root-доступ для записи в /etc/sudoers
, это не удастся. Команда echo
запускается от имени пользователя root, но не выполняет перенаправление -, которое уже было настроено оболочкой, которая готовила командную строку sudo echo...
к выполнению. И поскольку вы используете здесь sudo, я подозреваю, что оболочка не была запущена от имени пользователя root.
Вы можете перефразировать это как:
echo "test ALL=(ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers >/dev/null
В этой версии:
echo
выполняется от имени исходного пользователя tee -a <filename>
добавляет копию передаваемого по конвейеру ввода в указанный файл как root, что именно то, что вам нужно. awk -F'|' '{ $3 = ($3 == "NULL" ? "-" : $3) } 1' OFS='|' file
|
, чтобы сохранить разделители в вашем файле -
, если нет, сохраняем значение как есть. 1
в конце печатает вашу строку с измененным 3-м столбцом или без него в зависимости от того, был ли наш тест успешным или нет. ($3=="NULL"?"-":$3)
— тернарный оператор, проверяющий, верно ли условие $3=="NULL"
. Если true ?
, то мы присваиваем -
, а если false :
, мы оставляем поле как есть. Тесты
$ cat positioned
45|abc|NULL|hol|
Gha|ghsk|NULL|gah
$ awk -F'|' '{ $3 = ($3 == "NULL" ? "-" : $3) } 1' OFS='|' positioned
45|abc|-|hol|
Gha|ghsk|-|gah
$ cat positioned
45|abc|NULL|hol|
Gha|ghsk|NULL|gah
95|xyz|NonNULL|hol|
asdf|ghsk|NonNULL|afs|
$ awk -F'|' '{ $3 = ($3 == "NULL" ? "-" : $3) } 1' OFS='|' positioned
45|abc|-|hol|
Gha|ghsk|-|gah
95|xyz|NonNULL|hol|
asdf|ghsk|NonNULL|afs|