J'étudie le comportement d'un script qui est normalement exécuté comme un processus automatisé (par exemple cron, Jenkins). Le script peut (éventuellement) invoquer des commandes qui se comportent différemment (en recherchant la saisie de l'utilisateur) lorsqu'il est exécuté de manière interactive; par exemple, patch
demandera quoi faire avec un patch inversé et svn
demandera des mots de passe, mais j'ai besoin de voir ce qui se passe lorsqu'ils sont exécutés de manière non interactive.
Convaincre patch
qu'il n'est pas interactif est assez facile; J'ai juste besoin de rediriger stdout
pour être un non-tty:
$ </dev/null > >(cat) /path/to/myscript --args
Cependant, svn
se connectera au terminal de contrôle s'il existe; éditer les scripts à passer --non-interactive
n'est pas vraiment une option car cela vient de plusieurs niveaux et il serait difficile d'être certain d'avoir trouvé chaque invocation.
Existe-t-il un moyen d'invoquer un script / commande de manière non interactive, sans terminal de contrôle (donc cela /dev/tty
n'existe pas)? Je préfère que stdout / stderr continue d'aller à mon terminal.
(J'ai trouvé la question Exécuter le script dans un shell non interactif? Mais les réponses à cela discutent des différences entre l'environnement cron et l'environnement utilisateur; j'ai déjà éliminé toutes les différences sauf la non-interactivité.)