Выполнить ожидание внутри сценария 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 попытками … просто случается быть последним.

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

Interesting Posts

Реверсирование направления трекбола

Почему устройства, подключенные к моему интерфейсу wlan0, не обмениваются данными с устройствами eth0?

Невозможно установить linux-headers-4.7 в пакеты после установки ядра 4.7 Debian Jessie

Запустить скрипт на блокировку экрана в KDE

Как отключить Ristretto от запуска, максимизированного всякий раз, когда я дважды щелкните изображение для просмотра?

sshfs – не может размонтировать точку

Как построить устройство сетевого подключения?

Как создать сайт в Apache 2 Debian 8?

Используйте определенный интерфейс для определенной подсети назначения (исходный IP-параметр)

Как написать все строки от меньшего до файла?

Как заставить VPN-клиентов использовать только прокси-сервер SOCKS5?

Запуск Chromium на ARM – Не удалось загрузить библиотеки NSS

Мобильная широкополосная связь многократно подключается / отключается

Что означает в нижней части vim?

Файлы заголовков Nixos X11 не найдены

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