我正在研究通常以自动化流程运行的脚本的行为(例如cron,Jenkins)。脚本可以(最终)调用以交互方式运行时行为不同的命令(寻求用户输入);例如,patch
将询问如何处理反向补丁,并svn
询问密码,但是我需要查看当它们非交互式运行时会发生什么。
说服patch
它是非交互的是相当容易的。我只需要重定向stdout
成为非tty:
$ </dev/null > >(cat) /path/to/myscript --args
但是,svn
将连接到控制端子(如果存在);否则将连接到控制端子。编辑脚本以通过--non-interactive
不是一个真正的选择,因为它来自多个层次,很难确定我是否找到了每个调用。
有没有办法在没有控制终端的情况下(因此/dev/tty
不存在)非交互地调用脚本/命令?我希望stdout / stderr仍然可以转到我的终端。
(我在非交互式外壳中找到了问题“运行脚本”吗?但是该问题的答案讨论了cron和用户环境之间的差异;我已经消除了除非交互性之外的所有差异。)