2017-05-31 73 views
1

我想在終端上運行一個for循環,我想把每個迭代發送到後臺進程,以便它們全部同時運行。爲什麼是「&;」 bash中的語法無效?

以下是運行一個命令由一個

for i in *.sra; do fastq-dump --split-files $i ; done # ";" only 

我已經強調了分號。

同時運行這工作

for i in *.sra; do fastq-dump --split-files $i & done # "&" only 

但是這給出了一個錯誤

for i in *.sra; do fastq-dump --split-files $i & ; done # "& ;" 

如果有一個人解釋這到底是怎麼回事這將是很好。我知道這應該寫在一個合適的縮進shell腳本的方式,但有些時候我只有這個命令來運行。

感謝

+5

在發佈您的問題之前學會使用http://shellcheck.net。錯誤標記爲「SC1045:它不是'foo&; bar',只是'foo&bar'。祝你好運。 – shellter

回答

6

&;雙方終止他們前面的命令。

你不能寫& ;比你可以寫; ;& &,更多的是因爲語言只允許一個命令被終止後(並且不允許零單詞列表作爲一個命令)。


因此:for i in *.src; do fastq-dump --split-files "$i" & done是完全正確的原樣,並且不需要額外的;

+0

那麼在我的命令結束時就足夠了?你也可以在我的問題中看到突出顯示的粗體分號。出於某種原因,它不是粗體althoguh我選擇了B選項 – user3138373

+0

你不能在代碼塊中加粗。是的,只需'&'就足夠了。 –

相關問題