Выполнить ожидание внутри сценария bash как другого пользователя

Я пишу сценарий bash для установки небольшого программного обеспечения, которое я разрабатываю. Этот скрипт запускается с sudo (как root), но некоторые из команд, которые выполняются скриптом, нуждаются (или должны быть) запускаться с обычным пользователем, имя которого я сохраняю в переменной $userName . Большинство команд – это один лайнер, а su -c "/what/ever/command" $userName работает достаточно хорошо.

Однако одна из тех команд, которые я не хочу запускать с root , будет задавать мне вопросы (на самом деле, только одно, но много раз: следует ли перезаписывать существующий файл или нет). Эта команда, которую я могу назвать « baaad_command », не имеет возможности предоставить ответ по умолчанию (нет « --assume-no » или что-то в этом --assume-no ).

Единственный вариант, который я вижу выполнимым, – это использовать команду expect и отвечать « n\r » каждый раз, когда команда выводится, а строка начинается с « Overwrite », я хочу, чтобы мой скрипт ответил no (что означает « n\r ») столько же раз, когда baaad_command спрашивает "Overwrite... ? [y/n]"

Я пробовал много разных комбинаций su, spawn, expect … без везения.

Это моя последняя попытка:

 #!/bin/bash if [[ -d "$destinationFolder" ]] ; then if [[ -n "$userName" ]] ; then spawned=$(su -c expect -c " spawn baaad_command --user \"foo\" --passwd \"bar\" \"$destinationFolder\" expect { Overwrite: { send \"n\r\"; exp_continue } eof { exit } } " ) else echo "Don't have a non-root username to install baaad_command with. Skipping" exit 3 fi else echo "$destinationFolder directory not found in $(pwd). Can't continue" exit 2 fi 

У этого нет никакой замечательной вещи по сравнению с другими 200 попытками … просто случается быть последним.

Любой намек будет очень оценен. Заранее спасибо.

Linux и Unix - лучшая ОС в мире.