これはzsh
うまくいきます:
alias foo=ls
foo
しかし、次はそうではありません。
alias foo=ls; foo
インタラクティブに実行するときにEnterキーを押すと、追加時間が発生することは問題になりません。しかし、実行中にssh
突然問題が発生しました。
% ssh zsh@server 'alias foo=ls; foo'
zsh:1: command not found: foo
改行文字を使用しても機能しません。
% ssh zsh@server 'alias foo=ls;
foo'
zsh:2: command not found: foo
奇妙なことに、zsh
別名であることを知っています。
% ssh zsh@server 'alias foo=ls; alias'
foo=ls
run-help=man
which-command=whence
zsh
エイリアスを有効にする必要があるかどうかはどうすればわかりますか?
ベストアンサー1
これはよく知られている問題であり、zsh
マニュアルの「Alias」の章にも記載されています(参考資料を参照man zshmisc
)。これを処理するための推奨される方法は、エイリアスの代わりに関数を使用することです。
foo() { ls; } ; foo
または、次の場合にはより良いですls
。
foo() { ls -- "${@:-.}"; } ; foo
PS。関数定義(リスト)の末尾にあるセミコロンとスペースはzshでは必要ありませんが、他のシェルではまだ習慣的に使用されます。