Ich untersuche das Verhalten eines Skripts, das normalerweise als automatisierter Prozess ausgeführt wird (z. B. cron, Jenkins). Das Skript kann (eventuell) Befehle aufrufen, die sich bei interaktiver Ausführung anders verhalten (nach Benutzereingaben suchen). Ich patch
werde zum Beispiel fragen, was mit einem umgekehrten Patch zu tun ist, und svn
nach Passwörtern fragen, aber ich muss sehen, was passiert, wenn sie nicht interaktiv ausgeführt werden.
Es patch
ist ziemlich einfach, davon zu überzeugen, dass es nicht interaktiv ist. Ich muss nur umleiten stdout
, um ein Nicht-Tty zu sein:
$ </dev/null > >(cat) /path/to/myscript --args
Stellt svn
jedoch eine Verbindung zum steuernden Terminal her, falls vorhanden. Das Bearbeiten der zu übergebenden Skripte --non-interactive
ist keine Option, da dies aus mehreren Ebenen stammt und es schwierig sein könnte, sicher zu sein, dass ich jeden Aufruf gefunden habe.
Gibt es eine Möglichkeit, ein Skript / einen Befehl nicht interaktiv ohne ein steuerndes Terminal aufzurufen (das /dev/tty
gibt es also nicht)? Ich würde es vorziehen, wenn stdout / stderr immer noch zu meinem Terminal geht.
(Ich habe die Frage Skript ausführen in einer nicht interaktiven Shell gefunden? In den Antworten darauf werden jedoch die Unterschiede zwischen der Cron- und der Benutzerumgebung erörtert. Ich habe bereits alle Unterschiede außer der Nicht-Interaktivität beseitigt.)