[英]How to start new gnome-terminal with blocking call?
我需要從腳本中打開一個新終端,但是我想等待該終端退出,然后再繼續執行其余腳本。 我知道
gnome-terminal -e 'nano test.txt'
打開一個新的終端窗口,並在nano中打開“ test.txt”,但不會阻止調用腳本。 有沒有辦法在繼續原始腳本之前等待新終端退出?
例如,您可以使用&&
(另請參見shell命令中“ &&”的目的是什么? ):
gnome-terminal -e 'nano test.txt' && sleep 5 && echo "Done"
為了讀者的利益:@Feiteira的答案以前是正確的答案,但gnome-terminal
不再支持。 選項--disable-factory
已從 gnome-terminal
刪除 。
在這里解釋幾個人的不同看法:
如果它是第一個實例,則gnome-terminal
僅阻止。 然后,該單個實例充當gnome-terminal
將來所有調用的服務器。 然后,這些其他gnome-terminal
調用將所有內容移交給該服務器,並立即終止。 因此,您可以觀察到兩種行為:“阻塞”(當它是一個唯一實例時)和“非阻塞”(當另一個實例已經在運行時)。
有一個包裝器 ,例如Ubuntu 16.04使用的包裝器 ,可以模擬該缺少的選項。 但是,該包裝器很復雜。 這是通過啟動另一個服務器(具有另一個服務名稱)來完成的。 對於該服務器,同樣的假設成立(您可以將其他gnome-terminal
附加到該服務器,然后其他gnome-terminal
也可以立即返回)。
我的建議是停止使用gnome-terminal
並切換到可以立即使用的功能。 例如,對於成熟的終端窗口, xfce4-terminal
正式支持所有那些絕對必要的選項:
xfce4-terminal --disable-server -x nano test.txt
此外, xfce4-terminal
引入了--hold
,它使您可以查看命令的輸出。 可悲的是--hold
有一個錯誤(至少在Ubuntu 16.04下),這會導致它(經常)截斷輸出(如果命令終止,則終端關閉得太早了,因此PTY的所有仍緩沖輸出不會使它停止運行)。如果您對PTY不夠小心,這是一個非常知名的常見錯誤)。
您想要的選項是:--disable-factory
gnome-terminal --disable-factory ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.