簡體   English   中英

無法理解簡單的shell腳本

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

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