2017-02-09 6 views
0

いくつかのフォルダをループしてビルドコマンドを実行するエイリアスを作成しようとしていますが、出力はそのままfor >と表示されます。bashエイリアスにループを組み込むにはどうすればいいですか?

これは私の.zshrcファイルで、私が持っている機能

recurse_build() { 
    for src in `ls`; do 
     cd $src; build; cd .. 
    done 
} 

であると私は別名

alias br='recurse_build' 

を作成しようとしているが、私は次のプロンプト

で終わります
for > 

ご協力いただければ幸いです。

編集:機能の固定構文エラーです。

+0

エイリアスの代わりに関数を使用するのはなぜですか? Btw関数に構文エラーがあります。 – janos

+0

なぜ関数を定義し、それをエイリアスにマップするのですか?関数をすべて直接使用する – Inian

+0

関数の定義が破損しています(現在ポストされています)。それを[shellcheck.net](http://shellcheck.net)で分析してください。 – mklement0

答えて

3

あなたのコマンド置換の欠落した逆引用符とは別に、これはとにかくファイルを反復する間違った方法です。グロブパターンを使用します。 pushdpopdを使用して

recurse_build() { 
    for src in */; do 
     pushd "$src" || continue # Don't do anything if pushd fails 
     build 
     popd 
    done 
} 

はどこに戻るために覚えておくことよりも少しクリーナーです。

+0

欠落しているバッククォートを修正しました.bashのファイルを繰り返し処理する方法についてはわかりませんでした。私はあなたが提案した構文を試してみましたが、実際にビルドを行うのではなく 'for>'プロンプトが表示されます。私はそれを少しデバッグできるかどうか見てみましょう。 編集:彼は直接機能していないとうまくいきます。エイリアスでは機能しませんが、関数を呼び出すだけで処理できます。 – jabbajac

1

おそらく右側に欠けているバックティックが、 lsの出力を処理するのは、とにかく悪い考えです。これは動作します

関連する問題