我正在嘗試編寫一個自動運行數據分析程序的腳本。數據分析需要一個文件,對其進行分析,並將所有輸出放到一個文件夾中。程序可以同時在兩個終端上運行(每個分析一個不同的主題文件)。我怎樣才能同時運行兩個bash腳本而不重複同一個動作?
我寫了一個可以自動完成所有輸入的腳本。但是,我只能讓我的腳本自動運行一個腳本。如果我跑我的腳本同時也將分析同一主題的兩倍(沒用)
目前,我的劇本是這樣的:
for name in `ls [file_directory]`
do
[Data analysis commands]
done
如果在兩個終端運行它,它會從的頂部開始包含所有數據文件的目錄。這是一個問題,所以我試圖做重複檢查,但它們不是很有效。
我嘗試了與if命令的名稱比較(沒有工作,因爲除了一個輸出文件以外的所有輸出文件都是唯一的名稱,所以它會檢查目錄頂部的第一個outfput文件夾,並說名稱是即使輸出文件夾進一步向下具有相同的名稱)。它看起來像..
for name in `ls <file_directory>`
do
for output in `ls <output directory>`
do
If [ name==output ]
then
echo "This file has already been analyzed."
else
<Data analyis commands>
fi
done
done
我認爲這是正確的方法,但顯然不是。我需要檢查所有的名字之前作出一些決定(而不是一個接一個這樣做)
然後我試着移動完整的數據文件與mv命令(沒有工作,因爲「名稱」在for語句存儲所有文件名,以便它在列表中向下,不管目前文件夾中的內容如何)。我記得讀過一些關於shell腳本不能「實時」處理的東西,所以這是行不通的。
我的想法一直在尋找某種修改到,如果語句,以便它所有的名稱檢查我做出一個決定之前(如何?)
也有我可能會丟失我的任何其他命令可能會嘗試嗎?
爲什麼不*背景*每個不同的搜索過程?例如'(你的具體目錄cmd)&'去下一個?還有Gnu'parallel'。 –
@ DavidC.Rankin:我希望在'OS X'上有'並行'本地存在的... ... –
@I'L'I ** GNU並行**使用'brew install parallel'很容易安裝 - 並且不可或缺! –