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, patchdemandera quoi faire avec un patch inversé et svndemandera 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 patchqu'il n'est pas interactif est assez facile; J'ai juste besoin de rediriger stdoutpour être un non-tty:
$ </dev/null > >(cat) /path/to/myscript --args
Cependant, svnse connectera au terminal de contrôle s'il existe; éditer les scripts à passer --non-interactiven'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/ttyn'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é.)