バックティックを使用してcmdのエイリアスを作成する

バックティックを使用してcmdのエイリアスを作成する

私はtcshで働いています。次のエイリアスを作成するには:

nc stop `nc list | awk '/Running/{print $1}'`

私は次のようなさまざまなバリエーションを試しました。

alias ncstop "nc stop `nc list | awk '/Running/{print $1}'`"

しかし、何も動作しません

ベストアンサー1

エイリアスを使用する前にバックティックが評価されないように、引用符を少し変更できます。

alias ncstop 'nc stop `nc list | awk '\''/Running/{print $1}'\''`'

'これは、シェルが|、などの$特殊文字を解釈せずにその文字を引用符で使用する場合に機能しますbacktick。これにより、これらの特殊文字をエイリアス定義に入力できます。ただし、エイリアスを定義する過程で、シェルは外部レイヤーを削除します'。エイリアス定義の実際の内容は次のとおりです。

nc stop `nc list | awk '/Running/{print $1}'`

構造'\''には通常説明が必要です。しかし、簡単に言えば、アポストロフィの3つです。 1つ目は前に引用符付き文字列を終了し、次に(シェルの解釈を避けるためにエスケープされた)はパスし、3番目は別の引用符付き文字列を開始します。したがって、この構文を使用すると、単一引用符で囲まれた文字列内に'\''アポストロフィ(たとえば、'または)を表示できます。single quote

複数の階層の解釈を必要とする文字列からすべての引用符とエスケープを正しくインポートするのは、すぐに混乱して複雑になる可能性があります。この質問に対するコメントでは、エイリアスを関数として実装することをbash検討することを提案しました。私は同じことが提案できると確信していますtcsh

おすすめ記事