Почему аргументы, переданные в файл .sh, отсутствуют после sudo su?

Использование awkсоздаст два файла; Те строки, в которых числовые части столбцов 1 st и 3 rd были одинаковыми, будут помещены в отдельный файл, а те строки, в которых эти столбцы различались, — в другой файл.

awk -F"[A B]" '{
    print >(($2==$5)?"matches.txt":"non_matches.txt")
}' infile.txt

Это установит разделитель полей awk в наборы символов A, Bили пробела, затем сравните, если числовые части были одинаковыми, тогда текущая строка будет записана в файл «matches.txt», иначе она будет записана в файл "не _match.txt".

0
28.10.2019, 14:40
1 ответ

Использование sudo su изменяет оболочку на нового пользователя, а именно root. Таким образом, переменные недоступны в новой оболочке.

Чтобы поделиться переменными, вам нужно будет опубликовать их в среде, чтобы root мог получить к ним доступ. Таким образом, значение testArg1 не «отсутствует» после команды sudo su... оно не печатается, поскольку вы изменили оболочку.

Лучше отредактируйте файл sudoers, чтобы позволить вашему пользователю запускать требуемую команду, если необходимо, напрямую.

См. предыдущие сообщения, такие как Блокировать все команды по умолчанию во время выполнения скрипта bash? , относительно использования «источника» и т. д. для управления доступом к переменным. И немного почитайте о области видимости переменных Bash, например. используя Руководство пользователя Bash .

6
28.01.2020, 02:14

Теги

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