Я исследую поведение скрипта, который обычно запускается как автоматизированный процесс (например, cron, Jenkins). Сценарий может (в конце концов) вызывать команды, которые ведут себя по-разному (запрашивая ввод данных пользователем) при интерактивном запуске; например, patch
спросит, что делать с обратным патчем, и svn
попросит пароли, но мне нужно посмотреть, что происходит, когда они запускаются неинтерактивно.
Убедить, patch
что это неинтерактивно, довольно легко; Мне просто нужно перенаправить, stdout
чтобы быть не-tty:
$ </dev/null > >(cat) /path/to/myscript --args
Однако svn
подключится к управляющему терминалу, если он существует; редактирование сценариев, которые нужно передать, на --non-interactive
самом деле не вариант, так как это происходит на нескольких уровнях, и было бы трудно быть уверенным, что я нашел каждый вызов.
Есть ли способ вызвать скрипт / команду неинтерактивно, без управляющего терминала (так, чтобы /dev/tty
он не существовал)? Я бы предпочел, чтобы stdout / stderr продолжал идти в мой терминал.
(Я нашел вопрос « Выполнять сценарий в неинтерактивной оболочке», но ответы на него обсуждают различия между cron и пользовательской средой; я уже устранил все различия, кроме неинтерактивности.)