簡體   English   中英

如何使用阻塞調用啟動新的gnome終端?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM