我有這個C程序:
int main() { return 10; }
運行此之後,當我在終端的打印10
寫echo $?
。
現在假設我有一個.sh
文件:
echo $?
運行C程序後,如果我運行.sh
文件它打印0
。
爲什麼?
我有這個C程序:
int main() { return 10; }
運行此之後,當我在終端的打印10
寫echo $?
。
現在假設我有一個.sh
文件:
echo $?
運行C程序後,如果我運行.sh
文件它打印0
。
爲什麼?
如果你想獲得你的c程序的退出值,在.sh文件中啓動你的c程序,然後使echo $?
./c_prog
echo $?
$?的值?是最後一個命令的退出值。如果你啓動你的bash腳本,它只包含echo $?,它們沒有最後一個命令。
恐怕它不回答這個問題。 – ouah
簡單:.sh
文件由bash或其他一些shell執行。該二進制文件(/bin/bash
或任何位置)執行該腳本,然後退出。如果shell二進制成功退出,它會在您的bin將10返回到系統並且執行您的.sh文件後啓動一個新的shell進程(並且此shell不執行您的程序)之後,它會返回到系統
。 。所以echo $?
大概呼應另一個進程正在執行的shell實例運行的返回值(登錄,或任何...)
命令echo $?
呼應值的退出代碼執行你返回的最後一個程序。如果你的C程序,它返回10,所以你看到10出現。你.sh
文件,但被另一個二進制執行,返回0(成功時),因此echo $?
顯示爲0。
假如你這樣做:
./your_bin
./your.sh
echo $?
//--> echoes 0
./your_bin
echo $?
//--> echoes
如果執行bash腳本中的二進制,和你的腳本「前進」二進制的退出代碼,不是簡單地寫:
#!/bin/bash
./your_bin
exit $?
一個側面說明:從程序返回隨機整數不是最大的想法。退出代碼的意思是的東西。這就是爲什麼C標準的lib定義2宏的:
printf("%d vs %d\n",
EXIT_SUCCESS
EXIT_FAILURE
);
你猜怎麼着,EXIT_SUCCESS
顯示爲0,EXIT_FAILURE
爲1
如果.sh由二進制文件執行,在整個'.sh'程序執行之前如何返回? –
@RikayanBandyopadhyay:添加到我的答案,只需添加'退出$?'或'退出123',如果123是您想要退出的代碼 –
@RikayanBandyopadhyay:對不起,誤解您的評論:它不能:如果二進制文件是仍然在運行,那麼你不能得到它的退出代碼,因爲它沒有執行。腳本_can_獲得退出代碼,如果二進制文件在該腳本中啓動的話,儘管......這就是我添加到我的答案中......但老實說,如果你編寫一個C程序,執行類似'system(「/ home /user/bash_script.sh「);',反正使用C有什麼意義? –
您如何運行腳本?還請顯示您的腳本的內容。 – ouah
我認爲他們打印0因爲你開始你的bash skript $後?獲得另一個值 – Oni1
它就像是一個全新的shell,沒有運行命令,是第一個命令,正好是'echo $?' - 因此0 – ShinTakezou