シェルエイリアスを「スタック」する方法は?

シェルエイリアスを「スタック」する方法は?

私のシミュレーションモード.profileには、次のコードスニペットがあります。sh.zshrc

if [ -f /usr/bin/pacmatic ]; then
    alias pacman=pacmatic
fi

# Colorized Pacman output
alias pacman="pacman --color auto"

ただし、2番目のエイリアスは常に最初のエイリアスよりも優先されます。

% type pacman
pacman is an alias for pacman --color auto

/usr/bin/pacmatic2番目のエイリアス割り当てが最初の割り当てを「継承」して存在する場合にエイリアスを作成するにはどうすればよいですかpacmatic --color auto

私はエイリアスの代わりに関数を使用することに反対しませんが、呼び出されるたびにロジックが実行されないことをお勧めします(シェルが実行されるたびにチェックするのではなく、シェルが起動したときに一度確認したいpacman)。また、移植可能なスクリプトを好みますが、これが不可能な場合は完全な構文を使用できます。pacmaticpacmanshzsh

(はい、エイリアスを追加すると、この問題を簡単に解決できることがわかります--color autopacmaticしかし、正しい方法でやりたいです™。)

インターネット検索とマニュアルページを閲覧しようとしましたが、役に立ちませんでした。

ベストアンサー1

エイリアス置換は、対話型ソースから行を読み取る場合にのみ実行されます。したがって、2番目の別名は最初の別名の影響を受けないため、リテラル置換です。

たぶん次のようなものがあります。

PACMAN=pacman
if [ -f /usr/bin/pacmatic ]; then
    PACMAN=pacmatic
fi

# Colorized Pacman output
alias pacman="${PACMAN} --color auto"

これにより 'pacman' が正しい値に設定され、PACMAN 環境変数はエクスポートされないため、スクリプトが完了すると消えます。移動する。

私は同様のアプローチを使用します。

PACMAN=pacman
which pacmatic &>/dev/null && PACMAN=pacmatic
alias pacman="${PACMAN} --color auto"

デフォルトでは、環境変数PACMANを設定し、パスでpacmaticをテストし、見つかった場合はPACMANを設定し、エイリアスを定義します。

まあ、もう少し最適化することはできますが…

which pacmatic &>/dev/null && PACMAN=pacmatic
alias pacman="${PACMAN:-pacman} --color auto"

ダダ! PACMANが設定されていないか空の場合は「pacman」に設定され、それ以外の場合はPACMANの値に設定され、「which」行を介してpacmaticに設定されます。

おすすめ記事