2015-02-12 97 views
0

我試圖從bash腳本觸發的bash腳本中運行以下兩個任務。當我將其他註釋掉時,這兩個都正確執行,這顯然是我錯誤地佈置完整作業的方式。單個bash腳本中的多個連續執行任務

他們應該按順序運行,而不是並行的,所以第一個EXEC需要完成第二個開始前...

我也應該注意到,這些變量被從PHP腳本,通過傳遞觸發它(如果它是相關的)。

#!/bin/bash 

Udata1=$1 
Udata2=$2 

#Encode incoming audio file to 128k MP3 using avconv 
exec avconv - i /var/www/html/tracks/$Udata1/$Udata2 -ab 128k /var/www/html/tracks/$Udata1/serve/$Udata2.128k.mp3; 

#Encode 128k MP3 generated above to WAV using avconv 
exec avconv -i /var/www/html/tracks/$Udata1/serve/$Udata2.128k.mp3 /varwww/html/dump/$Udata2.wav 

exit; 

我想我最好問的是如何在同一個.sh腳本中運行多個exec?

+2

'一個bash腳本被一個php腳本觸發'確保你非常清楚這樣做的安全含義。 – 2015-02-12 00:08:24

+0

是的,我完全知道謝謝。通過一個包含在完全不同的PHP頁面上的方式調用這個PHP。這並不是說這只是坐在網絡服務器上供訪問者點擊。當然有人知道他們在做什麼和尋找什麼可能會違反它,但是真的不是這樣嗎?我欣賞這個建議。 – Grant 2015-02-12 00:20:00

+0

將PHP配置爲允許它執行操作系統進程的安全性要遠遠低於不進行配置。在這種情況下,我通常會根據需要設置一個標誌(在數據庫,文件系統等中),或者將某些內容推送到消息隊列中以觸發外部進程運行,而不是直接啓動進程。 – 2015-02-12 00:23:39

回答

1

exec用生成的進程替換當前正在運行的進程。它永遠不會返回。你不能exec這樣的事情。

這就是說你不需要。只需從這兩行刪除exec,它應該可以正常工作。

+0

砰! :)好,所以你今天教了我一些關鍵的東西!非常感謝你Etan!如果我也想在同一個腳本中運行不同程序的混合,這同樣適用嗎? – Grant 2015-02-12 00:16:18

+1

是的。你運行的並不重要。一個命令是一個命令,並阻止腳本直到它完成,除非你把它放在後臺或將它放入後臺。 – 2015-02-12 00:18:20

+0

我確實認爲命令在運行時會按順序阻止腳本,但確認後很好!謝啦 ;) – Grant 2015-02-12 00:22:56