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

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

  • Запросить пароль для пароля при использовании команды su
  • Разница между sudo-s и sudo su -
  • Когда su и sudo используют разные пароли?
  • Какой механизм запрещает любому пользователю получать доступ к файлам других пользователей через root?
  • Как исправить правильные сценарии запуска в интерактивной оболочке без входа
  • Как получить права root для конкретного пользователя, если у нас есть пароль root?
  • как передать переменную среды в sudo su
  • «Su» с ошибкой «Соединение X11 отклонено из-за неправильной аутентификации»
  • One Solution collect form web for “Выполнить ожидание внутри сценария bash как другого пользователя”

    Вероятно, вам нужно использовать su -c 'expect -c "spawn ..."' – обратите внимание на дополнительные кавычки.

    Interesting Posts

    Ограничение объема написания файлов с помощью скрипта PHP

    Не удается загрузить Ubuntu на новый ASUS Eeebook

    Как синхронизировать папки Dropbox с малиновым Pi?

    Необъяснимое разъединение rsync

    Почему теоретический предел RAM для RHEL 6 128 TB и как это определяется?

    Ошибка доступа к ретрансляции при попытке отправить почту извне в постфикс

    Добавить год к записям, созданным rsyslogd

    Как создать точку доступа Wi-Fi в opensuse 13.2

    reverse-i-search не показывает все результаты по сравнению с grep

    Gzip распаковывает файл с другим расширением?

    как получить доступ к работающим виртуальным машинам?

    Как проверить, проходит ли данное соединение через VPN?

    Правильный способ добавления одного и того же принтера дважды с теми же настройками по умолчанию: Evince не соблюдает эти настройки

    Проблема запуска java на Debian: «ошибка при загрузке разделяемых библиотек: libjli.so»

    Ищете ресурсы: например, C doc для чтения файлов и их атрибутов? (В Linux)

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