2016-02-29 30 views
0

我有一些子目錄內/home/das/work/如何在單個根目錄下爲不同目錄運行此腳本?

我創建了一個腳本

#!/bin/bash 
for i in *_K27me3.bed 
do 
intersectBed -wa -wb -a $i -b /home/das/work/mm9/mm9_prom_genes_2.5kb.bed | awk -v OFS='\t' {'print $1,$2,$3,$7,$8}' > `basename $i`_prom_genes_2.5kb.txt 
done 

它在目錄/home/das/work/

我想運行這個上面提到的目錄中的所有目錄。

我正在使用下面的命令,但它無法工作。我想知道兩種不同的方式來實現它,或者使用一個使用上述腳本作爲函數的腳本,並在每次它在父級的子目錄中運行它,或者如果我單獨調用上述腳本,如下所示。

命令來運行腳本父目錄/home/das/work

for f in *; do [ -d "$f" ] && cd "$f" && ./annotate_prom.sh;done;cd .. 

假設上午在運行上述命令正在錯誤 -clustershell: ./annotate_prom.sh: No such file or directory

+0

你得到了錯誤,因爲該命令'CD ..'是'出週期for'的 – ClaudioM

回答

1

交換donecd並把..在腳本路徑的開頭:

for f in *;做[-d 「$ F」] & &(CD 「$ F」 & & ../annotate_prom.sh);完成

+0

沒有,如果我做了上面的錯誤'-clustershell:./annotate_prom.sh:沒有這樣的文件或目錄',然後它帶我到根目錄,它不會停留在甚至在運行它的父目錄中。 –

+0

@vchris_ngs:記下'../'。我還更新了CD。 –

+0

啊是的,謝謝你,現在它的工作,我可能應該已經看到適當的更新。我正在自己嘗試,因此完全注意到了它。在任何情況下,如果我想將上述內容放在一個函數中,我應該怎麼做,而不是調用腳本,但是每當我進入父'annotate_prom.sh'的不同目錄時,都不應該調用它作爲函數是一個腳本,但是一個功能。 –

相關問題