從另一個腳本運行 bash 腳本並重定向其輸出

從另一個腳本運行 bash 腳本並重定向其輸出

大家好,我必須做一個程序..我會非常簡潔地解釋它...我已經完成了以及我必須做的事情...

簡單地說,我必須在Bash 中做一個“模擬器”,運行學生的練習並檢查它們是否正確......對於每個練習,我必須計算分數並說明學生是否通過了考試... ……

我幾乎已經完成了所有事情...我想我只是錯過了一些要寫的程式碼行..但我認為它們也是最重要的...:(

我的腳本是 TEST.SH,我必須運行學生的練習..練習是腳本 ELABORATO.SH... 現在,我可以有一些場景:

  1. ELABORATO.SH 在輸入中等待一些值作為參數;
  2. ELABORATO.SH 等待來自鍵盤的標準輸入的輸入;
  3. ELABORATO.SH 將輸出寫入檔案/fifo/etc..;

  1. 第一點很容易解決......事實上,從我的 TEST.SH 中,我ELABORATO.SH以這種方式呼叫:

    . ELABORATO.SH param1 param2 param3;
    

    第二和第三對我來說比較複雜..

  2. 我必須從文件中讀取一個字串(這是可以的)並將該字串傳遞給該字串,ELABORATO.SH因為該字串來自標準輸入。

  3. 我必須創建一個輸出為ELABORATO.SH...的文件,例如,如果ELABORATO.SH生成一個文件(我不知道輸出文件的名稱),我也必須在另一個目錄中生成一個文件...怎麼辦我願意?

答案1

這聽起來很像家庭作業*,但讓我們開始吧。

  1. 為什麼要取得ELABORATO.SH腳本?如果你這樣做了並且它有一個exit陳述或錯誤,你TEST.SH也會做同樣的事情。我不認為這就是你想要的。我只想運行腳本:

    bash ELABORATO.SH param1 param2
    
  2. 您是否考慮過重定向其輸入?

    bash ELABORATO.SH param1 param2 < INPUT_FILE
    
  3. 要捕捉 的輸出ELABORATO.SH,好吧,重定向似乎不是製成為了那個原因?

    bash ELABORATO.SH param1 param2 < INPUT_FILE > OUTPUT_FILE
    

找出哪些文件ELABORATO.SH寫入了資料並非易事。 (旁白:如果你不知道它的輸出文件,那麼它們怎麼可能與計算 的分數相關ELABORATO.SH?為什麼還要費心移動它們呢?)

無論如何,讓我們開始吧。以下管道列出了已建立的文件ELABORATO.SH

strace bash ELABORATO.SH params < INPUT_FILE 2>&1 > OUTPUT_FILE \
    | grep '^open(.*O_CREAT' | cut -d\" -f 2  

然後將它們移到其他地方你可以這樣做:

for f in $(
    strace bash ELABORATO.SH params < INPUT_FILE 2>&1 > OUTPUT_FILE 
       | grep '^open(.*O_CREAT' | cut -d\" -f 2) 
do
    mv "$f" /path/to/elsewhere
done

*) 請向您的主管推薦 AskUbuntu 的友善人員。

相關內容