シェル関数(zsh)mexec
を追加して、すべての直下のサブディレクトリで同じコマンドを実行しようとしています。次の構造直下のすべてのサブディレクトリでコマンドを実行
~
-- folder1
-- folder2
mexec pwd
と私はすぐにサブディレクトリを引っ張ってfind
を使用してい
/home/me/folder1
/home/me/folder2
例えば表示されるでしょう。問題は、渡されたコマンドを実行することです。ここに私の最初の関数のdefintionです:
mexec() {
find . -mindepth 1 -maxdepth 1 -type d | xargs -I'{}' \
/bin/zsh -c "cd {} && [email protected];";
}
のみコマンド自体を実行しますが、引数に渡していないだけでmexec ls
が、ショーのためのmexec
作品、mexec ls -al
は/bin/zsh -c "(cd {} && [email protected]);"
第2ラインを変更する正確ls
のように振る舞う。すなわちmexec ls -al
ため、このエラー:
zsh:1: parse error near `ls'
を見つける
とexecのルートを行きますfind . -mindepth 1 -maxdepth 1 -type d -exec /bin/zsh -c "(cd {} && [email protected])" \;
私には、引数をzshに渡す方法に問題があると私に思い出させてくれます。これはまた、私がbashを使用すると問題になるようです:表示されるエラーは:
-a);: -c: line 1: syntax error: unexpected end of file
これを達成するにはどうすればよいでしょうか?
この場合、 'ls -al'はすべてのサブディレクトリで実行されているコマンドの例です。私は、どのコマンドを使用しているかにかかわらず、フリーフォームにしたいと思っています。 forループを試してみましょう。 – Zahymaka
@Zahymaka:関数を追加することでこれを行う一般的な方法を追加しました。あなたがあなたの問題を解決したら、それを受け入れる/ upvoteを忘れないでください。 – Inian
ディレクトリ名に引用符がある場合(zsh:1:不一致) – wilsotc