私はbashでエイリアスを作成しようとしています。私がやりたいことはls -la
をls -la | more
にマップすることです
私の.bashrcファイルでこれは私が試みたものです:
alias 'ls -la'='ls -la | more'
ただし、エイリアス名にスペースが含まれているため(これは想定しています)、機能しません。これに対する回避策はありますか?
Bashのドキュメント には、「ほとんどすべての目的で、シェル関数がエイリアスよりも優先されます」と記載されています。これはls
を置き換え、引数が(のみ)-la
で構成されている場合に出力をmore
にパイプ処理するShell関数です。
ls() {
if [[ $@ == "-la" ]]; then
command ls -la | more
else
command ls "$@"
fi
}
ワンライナーとして:
ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }
自動パイプ出力:
ls -la
エイリアスのmanページ から:
引用符が付いていない場合、各単純コマンドの最初のWordは、それが別名を持っているかどうかを確認するためにチェックされます。もしそうなら、そのWordは別名のテキストに置き換えられます。別名と置換テキストには、シェルのメタ文字を含む、有効なシェル入力を含めることができます。ただし、別名には「=」を含めることはできません。
したがって、最初のWordだけがエイリアスの一致についてチェックされ、複数Wordのエイリアスは不可能になります。引数をチェックし、一致する場合はコマンドを呼び出し、それ以外の場合は通常のls
を呼び出すシェルスクリプトを作成することができます( @ Dennis Williamsonの答えを参照してください )
デニスの答えから取られたわずかに改善されたアプローチ:
function ls() {
case $* in
-la* ) shift 1; command ls -la "$@" | more ;;
* ) command ls "$@" ;;
esac
}
またはワンライナー:
function ls() { case $* in -la* ) shift 1; command ls -la "$@" | more ;; * ) command ls "$@" ;; esac }
これにより、必要に応じてコマンドの後にオプションや引数を追加することができます。例えばls -la -h