Передача шаблона печати как переменная к awk

Если единственной причиной является редактирование конкретный файл, я думаю, переключаясь на интерактивную оболочку уже, "проблема безопасности". Это - точка зрения все же.

Полагайте, что Вы переключаетесь на root в интерактивном режиме. Затем независимо от того, что Вы работаете, выполнения с самыми высокими полномочиями. Теперь, вопрос состоит в том при доверии приложениям, Вы работаете. Конкретное приложение может иметь ошибку, которая излагает проблему безопасности.

Моя точка, что Вы хотите минимизировать материал, который Вы выполняете непосредственно под root. Выполнение X приложений приносит сложность целых X стеков и если какой-либо бэкдор или Escape могут неправильно использоваться, взломщик получает root доступ. И это не о X стеках только, это о любом программном обеспечении, которое Вы запускаете под root. Это - также причина, почему Вы / мы должны быть очень осторожны относительно приложений, который имеет setuid набор битов.

Как решение Вашего рабочего процесса я предложил бы sudoedit команда. Можно использовать его в форме

$ sudoedit <file_to_edit>

Это попытается пройти проверку подлинности / авторизовывают Вас (как регулярный sudo делает), и затем это выполнит Вашего предпочтительного редактора (установленный EDITOR переменная среды). Извлеките выгоду по выполнению как $ sudo $EDITOR <file_to_edit> это, редактор само работает под Вашими исходными полномочиями и после выхода из него это заменит файл результатами редактирования. Должен выйти редактор для внесения изменений эффективными мог бы быть немного разрушительным все же.

3
26.08.2014, 11:03
2 ответа

Вам не нужно использовать переменную ba, попробуйте:

$ echo $a | awk -F',' '{print '"$b"'}'
15986327,415532694,875121642

С этим $b расширяется оболочкой, а не awk. А остальное утверждение awk не влияет, так как оно заключено в единую кавычку.

5
27.01.2020, 21:14

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.

1
27.01.2020, 21:14

Теги

Похожие вопросы