在不同的目录中运行shell脚本

时间:2011-12-20 08:06:26

标签: bash shell

我有一个名为tinkering的目录,其中包含以下子目录:

saraswati\ and\ durga\ pooja
64\ yogini\ pooja
52\ guruwar\ ke\ tap\ se\ unemployment\ finish
bajrang\ bali\ har\ lete\ ain\ devote\ dukh
bhoot\ bhagane\ ke\ tareke
bacho\ ko\ gussa\ ane\ ka\ karan
durga\ pooja
khatre\ ke\ nishan\ hanth\ mein
saraswati\ and\ durga\ pooja
seb\ chadhane\ se\ ma\ hinnamasta
bhoot\ bhagane\ ke\ tareke

每个子目录都有一个名为script.sh的脚本。

我在终端

上写了一个脚本
cd ~/tinkering/; 
cd saraswati\ and\ durga\ pooja/;  
./script.sh;    
cd ..;  
cd 64\ yogini\ pooja/;  
./script.sh;cd ../;  
cd 52\ guruwar\ ke\ tap\ se\ unemployment\ finish/;  
./script.sh;cd ../;  
cd bajrang\ bali\ har\ lete\ ain\ devote\ dukh/;  
./script.sh;cd ../;  
cd bhoot\ bhagane\ ke\ tareke/;  
./script.sh;cd ..;  
cd bacho\ ko\ gussa\ ane\ ka\ karan/;  
./script.sh;cd ..;  
cd durga\ pooja/;./script.sh;  
cd ..;  
cd khatre\ ke\ nishan\ hanth\ mein/;./script.sh;  
cd ..;cd saraswati\ and\ durga\ pooja/;  
./script.sh;cd ..;  
cd seb\ chadhane\ se\ ma\ hinnamasta/;  
./script.sh;cd ..;  
cd bhoot\ bhagane\ ke\ tareke/;  
./script.sh;cd ..;

但是这个脚本无法运行。目的不是去每个子目录并输入./script.sh我能够自动化这个过程。我在上面的代码中做了什么错误?

修改 请注意我在终端上用半分号写这些命令,而我在父目录中修改所有子目录都有一个不同的脚本,我正在做一个不同的工作,我想从终端上的父目录调用子目录的所有shell脚本。

4 个答案:

答案 0 :(得分:3)

for subdir in */; do
  cd "$subdir"
  ./script.sh
  cd ..
done

答案 1 :(得分:2)

正如其他人所指出的那样,“无法运行”可能意味着许多事情。例如。如果您收到Permission denied的消息,如果要使用chmod a+x script.sh调用脚本,则必须使用./script.sh

如果您能够使用/some path with whitespace/script.sh运行脚本,则可以将其放入~/tinkering/下的shell脚本中。

find -name script.sh -mindepth 2 -maxdepth 2 -exec sh {} \;

答案 2 :(得分:0)

脚本需要可执行并且有一个shebang。

在开始时点击#!/bin/sh并在终端chmod +x myscript.sh中运行(对于你称之为脚本的任何内容)。

如果您正在尝试执行所有子目录,您也可以使用for循环更有效地执行此操作(我看到Roland为此提供了答案,因此我将省略它)。

答案 3 :(得分:0)

我想这可能有用。

for d in */; do
 cp scr.sh "$d"
 chmod +x scr.sh
 done

for subdir in */; do
  cd "$subdir"
  ./scr.sh
  cd ..
done

for d in */; do rm scr.sh "$d"; done