Обе программы являются suid root. Нет причин когда-либо вводить sudo su
, за исключением ситуации, когда человек не знаком с параметрами -i
и -E
для sudo или иным образом в привычка делать что-то как root, не понимая, почему это делается. Команды su проходят через несколько жестко запрограммированных переменных среды (или, в последних версиях Linux, можно использовать -p
для прохождения через всю среду), в то время как sudo может точно контролировать, какие переменные проходят (попробуйте ] $ DISPLAY
для полезного примера). Команда su может запрашивать только пароль целевого пользователя (при условии использования стека pam по умолчанию), в то время как sudo может быть настроен на аутентификацию как исходный или целевой пользователь, либо ни один, либо всегда root - и может делать это для каждой команды. Команда su
сбрасывает $ HOME
, а sudo может принять решение на основе доступного набора правил. И это еще один разветвленный процесс, который не должен существовать. Между тем, sudo регистрирует выполняемые команды, так что если вы не просто выполняете sudo -i
или иным образом запускаете оболочку, вы можете получить способ лучшего контрольного журнала с судо. Когда вы запускаете команду с помощью sudo, она удаляет оба .
и пустые элементы в $ PATH, а затем проверяет наличие последних, не позволяя людям вставить сценарий оболочки с именем «ls» в / tmp
и тому подобные махинации. :)
По сути, sudo su
- это все равно что прибить одну руку к спине sudo и ничего не получить. :)
Единственный способ решить эту проблему, переключаясь между awk и оболочкой, — позволить сценариям AWK генерировать код оболочки для следующего шага. Но это звучит слишком сложно для меня. Я также рекомендовал бы перенести все в awk (или здесь можно использовать и perl?)
Это достаточно просто сделать в bash
и других оболочках:
while IFS=, read a b c d e ; do
your_stuff
done < your_csv_file
IFS — это разделитель полей ввода. установите для команды read
только запятую.
читать пять переменных одновременно.
Сделайте что-нибудь с вашими новыми переменными оболочки $a $b $c $d $e.
Вы должны определить направление ввода относительно -в конце цикла while
после ключевого слова done
.