Estou investigando o comportamento de um script que normalmente é executado como um processo automatizado (por exemplo, cron, Jenkins). O script pode (eventualmente) chamar comandos que se comportam de maneira diferente (buscando a entrada do usuário) quando executados de maneira interativa; por exemplo, patch
perguntará o que fazer com um patch invertido e svn
solicitará senhas, mas preciso ver o que acontece quando elas são executadas de maneira não interativa.
Convencer patch
que não é interativo é bastante fácil; Eu só preciso redirecionar stdout
para ser um não-tty:
$ </dev/null > >(cat) /path/to/myscript --args
No entanto, svn
será conectado ao terminal de controle, se existir; editar os scripts para passar --non-interactive
não é realmente uma opção, pois isso vem de vários níveis e seria difícil ter certeza de que encontrei todas as chamadas.
Existe uma maneira de chamar um script / comando de maneira não interativa, sem um terminal de controle (para que /dev/tty
isso não exista)? Eu preferiria que o stdout / stderr ainda vá para o meu terminal.
(Encontrei a pergunta Executar script em um shell não interativo? Mas as respostas discutem as diferenças entre o cron e o ambiente do usuário; já eliminei todas as diferenças, exceto a não interatividade.)