2016-02-29 97 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'的不同目录时,都不应该调用它作为函数是一个脚本,但是一个功能。 –

相关问题