2011-12-20 10 views
0

私はサブディレクトリを、次のいtinkeringという名前のディレクトリを持っています。実行しているシェルスクリプトは

私はターミナルでスクリプトを書いた:

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と入力するのではなく、このプロセスを自動化することができました。上記のコードで私は何の間違いをしましたか?

EDIT 私は親ディレクトリ内のすべてのサブディレクトリは、私はすべてのシェルスクリプトを呼び出したい異なった仕事をしている別のスクリプトを持っていじっている間に私は、セミコロンで区切られた端末上でこれらのコマンドを書いたのでご注意くださいサブディレクトリを端末の親ディレクトリから削除します。

+3

「実行できません」という意味はわかりません。 –

+0

絶対に。私はshebangが不足しているか、実行可能ではないという前提で行ってきましたが、それは潜在的にそれではない可能性があります。 –

+0

デザイン上の別のこと:これらの 'script.sh'ファイルはすべて同じものですか?それは単にあなたがそれを実行するディレクトリの問題なのですか、それとも別のことをしているのですか? –

答えて

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

まあまあですが、いくつかの文字を追加すると 'cd ..'の必要性がなくなります。 –

+1

@ IgnacioVazquez-Abrams:あなたは '(cd" $ subdir "; ./script.sh)'としてそれをやっているのですか? –

+0

うん、 'cd $ subdir; ./script'-partを括弧で囲んでサブシェルします。それからcdする必要はありません。 – plundra

2

他の人が指摘したように、「実行できませんでした」とは数多くのことを意味する可能性があります。例えば。 Permission deniedというメッセージが表示された場合は、./script.shでスクリプトを呼び出す場合は、chmod a+x script.shを使用する必要があります。

/some path with whitespace/script.shでスクリプトを実行できる場合は、これをシェルスクリプト~/tinkering/に入れることができます。

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

@fleshいいえ親ディレクトリのスクリプトがcdコマンドで言及されているディレクトリを変更できないというアクセス許可についてはありません –

+0

これは新しいアプローチ+1です。 –

0

スクリプトが実行可能とシェバングを持っている必要があります。

#!/bin/shを起動時に入力し、chmod +x myscript.sh(スクリプトと呼ばれるもの)の端末で実行します。

すべてのサブディレクトリを実行しようとしている場合は、forループを使って効率的に行うこともできます(Rolandがその答えを示しているので、省略します)。

+1

スクリプトをインタプリタに直接渡さない限り、 'bash somescript.sh'。 –

+0

真実だが、彼が '。/ script.sh'を実行していると言っていると、私は彼がそうでない可能性が高いと思う。 –

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 
関連する問題