Bash:エイリアス名のスペース


117

bashでエイリアスを作成しようとしています。私は何をしたいのマップですls -lals -la | more

私の.bashrcファイルでは、これが私が試みたものです:

alias 'ls -la'='ls -la | more'

ただし、エイリアス名にスペースが含まれているため(これは推測されます)、機能しません。これに対する回避策はありますか?


8
なぜしないでくださいalias lsm='ls -la | more'
ニフレ

回答:


126

バッシュのドキュメントの状態「ほぼすべての目的のためには、シェル関数は、エイリアスよりも優先されます。」以下は、引数が(のみ)で構成されlsているmore場合に出力を置き換えてパイプするシェル関数です-la

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

1
ifステートメント内で二重括弧を使用する必要があるのはなぜですか?
-sixtyfootersdude

1
@sixtyfootersdude:ダブルブラケット形式はより強力で、私は習慣でそれを使用します。参照してくださいmywiki.wooledge.org/BashFAQ/031
デニス・ウィリアムソン

最後のコマンドは何ですか?エイリアスls = 'ls()' ??
ジーフ

1
@Jeef:いいえ、私の答えはエイリアスではなく関数使用しています。わかりやすくするために編集しました。
デニスウィリアムソン

6
@merlinpatt:command関数が再帰的に呼び出されるのを防ぎます。
デニスウィリアムソン

53

以下からのエイリアスのmanページ

各単純コマンドの最初の単語は、引用符で囲まれていない場合、エイリアスがあるかどうかが確認されます。その場合、その単語はエイリアスのテキストに置き換えられます。エイリアス名と置換テキストには、シェルメタキャラクターを含む有効なシェル入力を含めることができますが、エイリアス名に「=」を含めることはできません。

そのため、エイリアスの一致について最初の単語のみがチェックされるため、複数単語のエイリアスが不可能になります。引数をチェックし、一致する場合はコマンドを呼び出し、それ以外の場合は通常のコマンドを呼び出すシェルスクリプトを作成できる場合がありますls@Dennis Williamsonの回答を参照)


8
+1 ls -laをエイリアスとして使用できない理由を説明します。
-sixtyfootersdude

7
これは、解決しようとする代わりに質問に回答したため、役に立ちました。ここに来たのは、スペースを含むエイリアスを作成したかったからです。
angryundead

これは私の質問に答えただけでなく、エイリアシングメカニズムが実際にどのように機能するかについて貴重な洞察を与えてくれました。マニュアルページからの引用は非常に役に立ちました。
リリーフィンリー

14

デニスの回答から取られたわずかに改善されたアプローチ:

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


2
ls -latこの治療から除外したい場合、これはどのように処理されますか?-la*エントリの上にそれを処理するケースを置く必要がありますか?
スティーブンルー14

-1

このエイリアスは引き続き呼び出すことができますが、スペースがコマンドワードの一部であるためには引用が必要です。そのため、オプションをに"ls -la" -p pattern渡し-p patternます。morels

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.