Использование расширения параметра :
for f in words/*/*_pct.txt; do
n=${f#*/} # Remove everything till the first slash
n=${n%%_*} # Remove everything from the first underscore to the end
awk -v var="$n" -f script.awk "$f" >> words/results.txt
done
Обратите внимание, что вам нужно указать -v var = "$ n"
, и если ] $ n
содержат экранированные последовательности, они будут раскрыты.
Я думаю, что лучше всего использовать (фоновый )занятый -цикл ожидания, который обновляет отметку времени sudo, которую вы затем уничтожаете, когда вам больше не нужны sudo
привилегии. Вот пример сценария; он выполняет sleep 6
вместо ваших двух -часов command2
и запускает видимые /bin/echo
команды вместо command1
иcommand2
:
#!/bin/sh
sudo /bin/echo command 1
while :; do sudo -v; sleep 1; done &
infiloop=$!
sleep 6
sudo /bin/echo command 3
kill "$infiloop"
Для вашего сценария я бы рекомендовал более свободный цикл:
#!/bin/sh
sudo command1
while :; do sudo -v; sleep 59; done &
infiloop=$!
command2
sudo command3
kill "$infiloop"
Отрегулируйте sleep 59
по вкусу, в зависимости от существующей настройки timestamp_timeout
в sudoers; Я выбрал 59 только для того, чтобы продемонстрировать выбор, который вы могли бы сделать, если бы время ожидания метки времени составляло 60 секунд.
Ну можно было бы совместить Как сделать чтобы sudo забывал пароль автоматически после одной команды? и Какова цель явного использования `sudo -S `?
sudo
с флагом -k
, чтобы игнорировать учетные данные и всегда запрашивать пароль stdin
в sudo
с флагом-S
В определенных ситуациях это может быть полезно, но я не уверен, что хранить пароль пользователя в переменной окружения — это хорошая идея.