Если единственной причиной является редактирование конкретный файл, я думаю, переключаясь на интерактивную оболочку уже, "проблема безопасности". Это - точка зрения все же.
Полагайте, что Вы переключаетесь на root
в интерактивном режиме. Затем независимо от того, что Вы работаете, выполнения с самыми высокими полномочиями. Теперь, вопрос состоит в том при доверии приложениям, Вы работаете. Конкретное приложение может иметь ошибку, которая излагает проблему безопасности.
Моя точка, что Вы хотите минимизировать материал, который Вы выполняете непосредственно под root
. Выполнение X приложений приносит сложность целых X стеков и если какой-либо бэкдор или Escape могут неправильно использоваться, взломщик получает root
доступ. И это не о X стеках только, это о любом программном обеспечении, которое Вы запускаете под root
. Это - также причина, почему Вы / мы должны быть очень осторожны относительно приложений, который имеет setuid
набор битов.
Как решение Вашего рабочего процесса я предложил бы sudoedit
команда. Можно использовать его в форме
$ sudoedit <file_to_edit>
Это попытается пройти проверку подлинности / авторизовывают Вас (как регулярный sudo
делает), и затем это выполнит Вашего предпочтительного редактора (установленный EDITOR
переменная среды). Извлеките выгоду по выполнению как $ sudo $EDITOR <file_to_edit>
это, редактор само работает под Вашими исходными полномочиями и после выхода из него это заменит файл результатами редактирования. Должен выйти редактор для внесения изменений эффективными мог бы быть немного разрушительным все же.
Вам не нужно использовать переменную ba
, попробуйте:
$ echo $a | awk -F',' '{print '"$b"'}'
15986327,415532694,875121642
С этим $b
расширяется оболочкой, а не awk
. А остальное утверждение awk
не влияет, так как оно заключено в единую кавычку.
awk
переменные просто используются для своих значений, как и переменные в большинстве языков - они не перепарированы для выражений. С помощью этого можно делать все, что угодно:
a='15986327,415532694,850257614,875121642,20140819'
echo $a | awk -F, -v OFS=, '{print $1, $2, $4}'
(установка OFS
, чтобы на выходе были запятые). Если в качестве переменной требуется b
, Вы можете использовать:
b='$1, $2, $4'
echo $a | awk -F, -v OFS=, "{print $b}"
вместо этого, который заменяет b
в выражении awk
.
Все это говорит о том, что для этого вам не нужен awk
. Это действительно работа для cut
:
echo "$a" | cut -d, -f1,2,4
, которая выбирает поля 1, 2 и 4, используя ,
в качестве разделителя полей, без сложного двойного разбора кода. Именно для этого и делается cut
.