Estoy investigando el comportamiento de un script que normalmente se ejecuta como un proceso automatizado (por ejemplo, cron, Jenkins). El script puede (eventualmente) invocar comandos que se comportan de manera diferente (buscando la entrada del usuario) cuando se ejecuta de forma interactiva; por ejemplo, patch
preguntará qué hacer con un parche invertido y svn
solicitará contraseñas, pero necesito ver qué sucede cuando se ejecutan de manera no interactiva.
Persuadir patch
que no es interactivo es bastante fácil; Solo necesito redirigir stdout
para ser un no-tty:
$ </dev/null > >(cat) /path/to/myscript --args
Sin embargo, svn
se conectará al terminal de control si existe; editar los scripts para pasar --non-interactive
no es realmente una opción, ya que proviene de varios niveles y sería difícil estar seguro de que encontré cada invocación.
¿Hay alguna manera de invocar un script / comando de forma no interactiva, sin un terminal de control (para que eso /dev/tty
no exista)? Prefiero que stdout / stderr aún vaya a mi terminal.
(Encontré la pregunta ¿ Ejecutar script en un shell no interactivo? Pero las respuestas a eso discuten las diferencias entre el entorno cron y el entorno del usuario; ya he eliminado todas las diferencias excepto la no interactividad).