bashrcの遅延置換


10

〜/ .bashrcが実行されるとき(ターミナルを開くとき)ではなく、実行時置換~/.bashrc評価$()するエイリアスをどのように取得しますか?

このコマンドを頻繁に実行して、エイリアスを追加します。

svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff

ただし、~/.bashrcエイリアスとして追加すると、ターミナルを開いたときの評価にハードコードされていることがわかります。

$ alias
alias svnbranch='svn diff -r 178184:HEAD svn+ssh://branches/t4252 | colordiff'

端末を開いた場合、~エラーが発生します。

svn: E155007: '/home/dotancohen' is not a working copy
svn: E155007: '/home/dotancohen' is not a working copy
svn: E155007: '/home/dotancohen' is not a working copy
svn: E155007: '/home/dotancohen' is not a working copy
$ alias
alias svnbranch='svn diff -r :HEAD  | colordiff'
$

私はでエイリアスのこれら2つのバリエーションを試しました~/.bashrcが、どちらも同じ効果があります(予想通り)。

alias svnbranch="svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff"
alias svnbranch="svn diff -r `svn info | grep ^Revision | awk {'print $2'}`:HEAD `svn info | grep ^URL | awk {'print $2'}` | colordiff"

実行時に置換~/.bashrcを評価するためにエイリアスを取得するにはどうすればよい$()ですか?

さらに、Googleでこの状況をどのように検索しますか?「bashrc置換」、「bashrc遅延置換」、およびその他のキーフレーズをグーグルで検索しようとしましたが、情報を見つけるのに十分な一般的な問題であると思われるものについては何も見つかりませんでした。


2
なぜエイリアスでなければならないのですか?それをシェルスクリプトに移動して完了です。最近このようなディレクトリが$HOME/binあるPATH場合、ほとんどの* ixタイプのシステムはに入れます。
ウォーレンヤング

@WarrenYoung:正解です。この特定のインスタンスはスクリプトである可能性があります。しかし、私はまだ他のもののためにエイリアスを好むので私は答えを知りたいと思います、そして私は確かにこれに出くわすでしょう。質問を一般化して、「スクリプトである可能性があるのに、Bashがエイリアスをサポートする理由」にまとめることができます。
dotancohen 2015

なぜ反対票か。質問を改善するにはどうすればよいですか?私は例、失敗した試み、そしてグーグルで試したキーフレーズさえ提供しました。
dotancohen 2015

@dotancohen:個別に質問するべきだと思います。ここで部分的な答えを示しますalias cdp="cd ~/projects"。シェルスクリプトではできません。
ウォーレンヤング

回答:


11

単一引用符を使用て、特殊文字の処理を抑制します。あなたはまた、可能性がバックスラッシュ 秒。 $

複雑なコマンドの場合は、おそらくエスケープする必要がなく、読みやすく編集しやすい関数を使用する方がよいでしょう。

svnbranch() {
    svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff
}

エイリアスを定義できる場所ならどこでも関数を定義できます。


2
awkパターンスペースもあるawk '/^Revision/{ print ...}' ので、この場合はgrepは必要ありません。
Valentin Bajrami 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.