awk переменная как регулярное выражение

Это не ошибка, которую исправит обновление, а ошибка в вашей настройке. В sshd_config(5) manpage говорится, что

AuthorizedKeysCommand

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

Вам просто нужно убедиться, что /usr/bin/get_ldap_ssh_key.sh удовлетворяет этим требованиям:

sudo chown root:root /usr/bin/get_ldap_ssh_key.sh
sudo chmod 755 /usr/bin/get_ldap_ssh_key.sh

2
28.10.2016, 13:51
1 ответ

Хотя вы могли:

awk "/$p/" file2.txt > "$p.csv"

То есть заставить оболочку расширить содержимое переменной оболочки $ p в коде, переданном в awk , это плохая практика и в основном сводится к уязвимости внедрения команд (например, для значения $ p , например ^ / {system ("reboot"); / ). Лучше всего передать переменную оболочки как есть в awk и использовать оператор awk ~ для сопоставления регулярных выражений. Лучше всего использовать переменную окружения и специальный массив ENVIRON в awk :

export P
while IFS= read -r P; do
  awk 'NR == 1 || $0 ~ ENVIRON["P"]' < file2.txt > "$P.csv"
done < file1.txt

Но здесь вы можете избежать цикла оболочки и выполнить только один проход в файлах:

awk 'NR == FNR {files[$0]; next}
     FNR == 1 {for (f in files) print > f ".csv"; next}
     {
       for (f in files)
         if ($0 ~ f) print > f ".csv"
     }' file1.txt file2.txt
4
27.01.2020, 21:59

Теги

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