Terminal
呼叫與控制終端斷開連接的命令/腳本?
我正在調查通常作為自動化程序執行的腳本的行為(例如 cron、Jenkins)。該腳本可以(最終)在互動執行時呼叫行為不同的命令(尋求使用者輸入);例如,
patch
會詢問如何處理反向更新檔,並svn
詢問密碼,但我需要看看當它們以非互動方式執行時會發生什麼。說服
patch
它是非互動式的相當容易;我只需要重定向stdout
為非 tty:$ </dev/null > >(cat) /path/to/myscript --args
但是
svn
,如果存在,將連接到控制終端;編輯要傳遞的腳本--non-interactive
並不是一個真正的選擇,因為這來自幾個層次,而且很難確定我是否找到了每個呼叫。有沒有辦法在沒有控制終端的情況下以非互動方式呼叫腳本/命令(所以
/dev/tty
不存在)?我更喜歡 stdout/stderr 仍然去我的終端。(我發現了Run script in a non interactive shell?這個問題,但該問題的答案討論了 cron 和使用者環境之間的差異;我已經消除了除非互動性之外的所有差異。)
您需要啟動另一個未連接到終端的會話,例如:
$ 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
另請參閱
start-stop-daemon
某些 Linux 發行版上的命令。還有一個daemon
命令。
你可能想要做一個期望腳本。SVN 範例:
https://stackoverflow.com/questions/609445/using-expect-to-login-into-svn