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