2014-07-23 48 views
2

在一個bash腳本中,我用一個給出錯誤的命令啓動一個新的終端。不過,我似乎並沒有能夠抓住這個錯誤代碼:BASH從子終端獲得父終端的錯誤代碼?

#! /bin/bash 
gnome-terminal -x bash -c "cat dksdamfasdlm" 
echo $? 

輸出:

0 

所以我得到了gnome-terminal命令的錯誤代碼,而不是cat之一。我得到的一個建議是用代碼創建一個文件,並從父bash中讀取它。問題是,我似乎仍然無法和讀取錯誤代碼甚至這樣:

#! /bin/bash 
gnome-terminal -x bash -c "cat dksdamfasdlm; echo $?; sleep 2" 

輸出(新航站樓):

cat: dksdamfasdlm: No such file or directory 
0 

這是爲什麼?有關如何解決這個問題的建議?我只是想以某種方式從父bash中獲取新終端中的錯誤。

+0

你爲什麼要這麼做?除非你正在測試GNOME終端本身,否則你應該直接運行腳本,而不是通過終端。 – l0b0

+0

我正在嘗試爲應用程序(Docker)打開不同終端的BASH腳本。然而,我希望能夠抓住任何錯誤。 – Pithikos

+0

你能給我更多的背景嗎?我仍然不明白你爲什麼要使用終端,而不是僅僅運行腳本。 – l0b0

回答

1

看起來好像是GNOME終端在啓動後立即退出,如果運行例如gnome-terminal -x sleep 10就很明顯。由於它不會等待命令完成,因此返回碼將不會是命令的返回碼。我在gnome-terminal --help-all中找不到任何選項來保持該過程處於前臺。

關於你提到的第二個問題,你雙quoted的命令,所以$?是之前運行它擴大。這應該工作:

gnome-terminal -x bash -c 'cat dksdamfasdlm; echo $?; sleep 2' 

PS:本-x選項不GNOME終端3.8.4的gnome-terminal --help-all,記錄variousreferences沒有多大幫助,而且也對爲什麼有一個-e選項具有相同的語義,並沒有很好的解釋不同的語法。