3

私は知っています、私は最新のシェルを使用する必要があります...とにかく、ここにエイリアスがあります:

  alias p4client echo `p4 info | perl -ne 's/Client name: (.*)$/print $1/e'` 

また、p4 クライアント名を取得するためのより良い方法があることも知っています。これはほんの一例です。それで、エイリアスが作成されたときに評価するのではなく、エイリアスを呼び出すときにこれを評価するための素敵でクリーンな方法を誰か教えてもらえますか?

4

2 に答える 2

7

唯一のトリックは、一重引用符をバックスラッシュでエスケープし、他のすべてを一重引用符で囲むことです。

alias p4client 'echo `p4 info | perl -ne '\''s/Client name: (.*)$/print $1/e'\''`'

perl は単純化できますが:

alias p4client 'echo `p4 info | perl -ne '\''print /Client name: (.*)/'\''`'

echo と `` は、出力をキャプチャすると言っています。これらのコマンドは、印刷して印刷します。代わりに出力を印刷するだけです(p4出力から改行を削除するのではなく、perlに改行を含めて、echoに再追加させるだけです):

alias p4client 'p4 info | perl -ne '\''print /Client name: (.*)/s'\'

ただし、二重引用符に不親切なものは何も残っていないので、次のようになります。

alias p4client "p4 info | perl -ne 'print /Client name: (.*)/s'"

p4client の後に = がないことを除いて、ここでは bash で行う方法と何も違いはありません。

于 2010-08-26T04:24:49.597 に答える
3

エイリアス値には特殊文字が含まれているため、引用符で囲む必要があります。これを試して:

alias p4client "echo "\`"p4 info | perl -ne 's/Client name: (.*)'\"\$"'/print '\"\$"'1/e'"\`

そしてなんてこった、cshは世界で最悪のシェルです。その引用規則はひどいものです。私はこれを考え出そうとして頭を溶かしましたが、今はそれを説明するエネルギーが残っていません. 動脈瘤がある間はすみません。

編集 1:見よ、あなたの貴重なドル記号$がこの怪物に姿を変えた!'\"\$"'

編集 2: OK、回復し始めています。最愛のバッシュの甘い抱擁で過ごすたびに、私の力は戻ってきます。消えろ、csh、野獣野郎!

これがとても醜い理由は、全体を二重にエスケープしなければならないからです。1 つはドル記号を perl に渡すためで、もう 1 つはエイリアス ステートメントを安全に通過させるためです。それが役立つ場合、目標はエイリアスを次のようにすることです。

% alias
4client echo `p4 info | perl -ne 's/Client name: (.*)'\$'/print '\$'1/e'`

シーケンスが存在する理由'\$'は、csh には二重引用符内のドル記号をエスケープする方法がないためです。バックスラッシュを前に置くことはできません。実際には、引用符を一時的に閉じ、引用符の\$ 外で使用してから、引用符を再度開く必要があります。

于 2010-08-26T03:13:25.107 に答える