[英]Trouble understanding a simple shell script
我很久沒有使用過shell腳本了。 我在網上尋求幫助,但沒有找到足夠的指南..
這是我想要了解的代碼:
#!/bin/sh
# -*-sh-*-
if gcc $1 &> cmp_out; then
if ! ./a.out &> run_out; then
exit 0; # Success.
fi
fi
exit 1; # Failure.
什么是cmp_out和run_out? 這些是std_out嗎?
我知道&>是一個重定向指令。 但是我沒有在這個腳本語法中得到什么意思。
我正在尋找這個腳本正在做什么的高級概述。 如果您需要有關我使用此腳本的原因的更多信息,請通知我。 我將詳細介紹原因。
簡而言之,它是delta調試的一個包含示例(//www.st.cs.uni-saarland.de/dd/)
>
將上述命令的標准輸出重定向到命名文件。 &>
重定向標准輸出和標准錯誤。
所以cmp_out
是一個文件名,它將接收編譯器的標准輸出和標准錯誤輸出。 run_out
從a.out
接收標准輸出和標准錯誤(可能是由gcc
命令構建的二進制文件)。
此腳本采用一個參數,即源文件的名稱。 它使用gcc
編譯該源文件,如果編譯成功,則執行結果。 (默認情況下, gcc
將可執行文件寫為名為a.out
的文件。)
如果編譯失敗,那么你很幸運,因為腳本將輸出(標准輸出和標准錯誤)保存到一個名為cmp_out
的文件中。 如果執行的結果產生任何輸出,則將其保存在run_out
。 腳本本身沒有向stderr或stdout寫入任何內容。 即使找不到gcc
,該錯誤也會在cmp_out
結束。
關於腳本最奇怪的是它使用if
之后的感嘆號來反轉執行的退出狀態。 如果執行a.out
失敗,則腳本將以0退出,成功。 如果a.out
成功,腳本將退出1,失敗,這也是編譯失敗時的操作。 也許感嘆號是錯誤的? 整數后面的分號是不必要的。
程序中還有一個錯誤,因為“&>”的簡寫語法是一個bash的東西,並且在常規的sh shell中不起作用。 對於第一行應該是“#!/ bin / bash”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.