1

ディレクトリの下のすべてのgitリポジトリを見つけて、それぞれを順番に「git pull」するための簡単なスクリプトを作成しようとしていました。

これは私がこれまでに見つけたものです:

find ~/ -name ".git" -type d | sed 's,/*[^/]\+/*$,,' | xargs -L1 bash -c 'cd "$1" && git pull' _

端末に貼り付けた場合、これは意図したとおりに機能します。ただし、これを.bashrcファイルのエイリアスにすると、次のようになります。

alias gpa="find ~/ -name ".git" -type d | sed 's,/*[^/]\+/*$,,' | xargs -L1 bash -c 'cd "$1" && git pull' _"

コマンドが機能しません。xargs によって起動されたサブシェルが受信しているものを出力するように変更しました。

alias printgpa="find ~/ -name ".git" -type d | sed 's,/*[^/]\+/*$,,' | xargs -L1 bash -c 'echo "$1"' _"

実行すると、各サブシェルは改行を出力しますが、他には何も出力しません。

なぜこれが起こっているのか誰にも答えられますか?私の直感では、エイリアスの構文に問題があると言っていますが、何が起こっているのか正確にはわかりません。

4

2 に答える 2

2

問題は$1、エイリアスを実行するときではなく、エイリアスを定義するときに置き換えられることです。$これを防ぐには、バックスラッシュを使用するか、単一引用符を使用して、を引用する必要があります。例えば:

alias printgpa='find ~/ -name .git -type d | sed '\''s,/*[^/]\+/*$,,'\'' | xargs -L1 bash -c '\''echo "$1"'\'' _'
于 2013-02-21T18:16:00.797 に答える