cshのエイリアスループ

cshのエイリアスループ

ここでエイリアス循環エラーが発生するのはなぜですか?

alias df 'printf "\n"; df -hP | column -t'

しかし、ここではそうではありません。

alias df 'df -hP | column -t'

エイリアスに別の名前を付けて動作し続けることができることを知っていますが、基本的な作業を理解しようとしています。

ベストアンサー1

これはtcshのマニュアルページに記載されています(あなたはcshではなくtcshを使用しているようです)。引用された3番目の段落を参照してください。

シェルは、シェルによって設定、設定解除、および印刷できるエイリアスのリストを維持します。ニックネームそしてニックネーム注文する。コマンドラインを簡単なコマンドで解析した後(参照)注文する)は、各コマンドの最初の単語(左から右へ)にエイリアスがあることを確認します。もしそうなら、最初の単語をエイリアスに置き換えてください。エイリアスに履歴参照が含まれている場合は続行してください。記録の交換(qv)元のコマンドが前の入力ラインであるかのように。エイリアスに履歴参照がない場合、パラメータリストは変更されずに残ります。

したがって、lsのエイリアスがls -lの場合、ls /usrコマンドはls -l /usrになり、パラメータリストを妨げません。 「lookup」のエイリアスが「grep !^ /etc/passwd」の場合、「lookup bill」は「grep bill /etc/passwd」になります。エイリアスを使用してパーサーメタグラムを導入できます。たとえば `alias print 'pr !* | lpr 'はpr(1)の引数をラインプリンタに渡す「コマンド」(「print」)を定義します。

コマンドの最初の単語にエイリアスがないまでエイリアス置換を繰り返します。エイリアス置換が最初の単語を変更しない場合(前の例のように)、ループを防ぐために表示されます。追加のループが検出され、エラーが発生しました。

良い回避策は、\コマンドの前に文字を追加してエイリアス拡張を無効にすることです。

alias df 'printf "\n"; \df -hP | column -t'

おすすめ記事