eca*_*mur 9 process terminal tty interactive controlling-terminal
我正在调查通常作为自动化进程(例如 cron、Jenkins)运行的脚本的行为。脚本可以(最终)调用以交互方式运行时行为不同(寻求用户输入)的命令;例如,patch会询问如何处理反向补丁,并svn询问密码,但我需要看看当它们以非交互方式运行时会发生什么。
说服patch它是非交互式的相当容易;我只需要重定向stdout为非 tty:
$ </dev/null > >(cat) /path/to/myscript --args
Run Code Online (Sandbox Code Playgroud)
但是svn,如果存在,将连接到控制终端;编辑要通过的脚本--non-interactive并不是一个真正的选择,因为这来自多个层次,很难确定我是否找到了每个调用。
有没有办法在没有控制终端的情况下以非交互方式调用脚本/命令(所以/dev/tty不存在)?我更喜欢 stdout/stderr 仍然去我的终端。
(我发现了在非交互式 shell 中运行脚本的问题?但该问题的答案讨论了 cron 和用户环境之间的差异;我已经消除了除非交互性之外的所有差异。)
Sté*_*las 13
您需要启动另一个未连接到终端的会话,例如:
$ setsid sh -c 'tty; ps -jp "$$"; echo test' < /dev/null > log 2>&1
$ cat log
not a tty
PID PGID SID TTY TIME CMD
19506 19506 19506 ? 00:00:00 sh
test
Run Code Online (Sandbox Code Playgroud)
另请参阅start-stop-daemon在某些 Linux 发行版上找到的命令。还有一个daemon命令。