これは約8年間私にとって効果的でした。
$ alias al='alias | grep $1'
例:
$ al git
clean='git clean -xfde'
echo_git_root='echo "$(git rev-parse --show-toplevel || echo .)"'
# etc.
likeを呼び出すと、al git
私のすべてのgitエイリアスが表示されます。
しかし今は次のようになります。
$ al git
grep: git: No such file or directory
エイリアスが置き換えられていないようです。
$ alias al
al='alias | grep $1'
もちろん、(別名をバイパスして)nakedコマンドを実行すると、正常に動作します。
$ alias | grep git
clean='git clean -xfde'
echo_git_root='echo "$(git rev-parse --show-toplevel || echo .)"'
# etc.
私は試した:
al='alias | /usr/bin/grep $1'
al='alias | \grep $1'
al='alias | grep ''$1'''
al='alias | grep \\'$1\\''
この時点で私はアイデアを持っていません!
最近、MacOS MontereyからVenturaにアップグレードしました。以前のZSHバージョンが何であるかはわかりませんが、現在は5.9です。これが関連しているかどうかはわかりませんが、これは私のシステムに対する唯一の最近の変更です。
答え1
エイリアスはパラメータを使用せず、テキストを他のテキストに置き換えます。それらは非常に過酷な形式のプログラミング構造です。機能のないcshから来ました。
alias al='alias | grep $1'
コマンドの場所でトークンが見つかるたびにal
トークンが置き換えられると言うと、次のようになります。alias | grep $1
al git
次に置き換えられます:
alias | grep $1 git
これはシェルコードとして解釈されます。
空または設定されていない場合は、$1
次のようになります。
alias | grep git
ただし、set foo bar
or1=foo
またはorの後に実行すると、argv[1]=foo
次のようになります。
alias | grep foo git
標準入力を無視してファイル内を見つけますgrep
。foo
git
ここにBourneスタイルが必要です。
al() alias | grep "$@"
またはcshスタイル²:
alias al='alias | grep'
1csh
エイリアスソースの履歴拡張に関連するいくつかのトリックを使用して、エイリアスが引数を受け入れることができるように見えますが、これらのトリックはKornなどのシェルでは機能しません。
²まあcsh
、タグにエイリアスを追加します。 POSIXはインターフェイスを指定して複製しますが、制限を解決することもできます( 。alias al 'alias | grep'
alias token replacement
alias token=replacement
=
sh
zsh
zsh
aliases['=']=uname
'='
uname