大家好,我必須做一個程序..我會非常簡潔地解釋它...我已經完成了以及我必須做的事情...
簡單地說,我必須在Bash 中做一個“模擬器”,運行學生的練習並檢查它們是否正確......對於每個練習,我必須計算分數並說明學生是否通過了考試... ……
我幾乎已經完成了所有事情...我想我只是錯過了一些要寫的程式碼行..但我認為它們也是最重要的...:(
我的腳本是 TEST.SH,我必須運行學生的練習..練習是腳本 ELABORATO.SH... 現在,我可以有一些場景:
- ELABORATO.SH 在輸入中等待一些值作為參數;
- ELABORATO.SH 等待來自鍵盤的標準輸入的輸入;
- ELABORATO.SH 將輸出寫入檔案/fifo/etc..;
第一點很容易解決......事實上,從我的 TEST.SH 中,我
ELABORATO.SH
以這種方式呼叫:. ELABORATO.SH param1 param2 param3;
第二和第三對我來說比較複雜..
我必須從文件中讀取一個字串(這是可以的)並將該字串傳遞給該字串,
ELABORATO.SH
因為該字串來自標準輸入。我必須創建一個輸出為
ELABORATO.SH
...的文件,例如,如果ELABORATO.SH
生成一個文件(我不知道輸出文件的名稱),我也必須在另一個目錄中生成一個文件...怎麼辦我願意?
答案1
這聽起來很像家庭作業*,但讓我們開始吧。
為什麼要取得
ELABORATO.SH
腳本?如果你這樣做了並且它有一個exit
陳述或錯誤,你TEST.SH
也會做同樣的事情。我不認為這就是你想要的。我只想運行腳本:bash ELABORATO.SH param1 param2
您是否考慮過重定向其輸入?
bash ELABORATO.SH param1 param2 < INPUT_FILE
要捕捉 的輸出
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 的友善人員。