Bashにグローバルエイリアスはありますか?

Bashにグローバルエイリアスはありますか?

zshのようにbashで「グローバル」エイリアスを設定できるかどうか疑問に思います。-Gエイリアスオプション - ユーザーの観点から「グローバル」ではなく、シェルの観点から。

私が知りたいのは、エイリアス(または他のもの?)をbashのどこでも置き換えることができるということです。

例えば。 :

alias ...='../..'

答え1

Bashエイリアスにはこの機能はありませんが、次のように書くことができます。

alias cd='cd '
alias ...='../..'
cd ... # teleport to ../..

説明する:

バッシュリファレンスマニュアル説明する:

エイリアス値の最後の文字が空の場合、エイリアスの後の次のコマンドワードでもエイリアス拡張が確認されます。

考えられる解決策はReadlineマクロです。書くことができます:

set -o emacs
bind '"\C-x...":"cd ../.."'

echoControl+ x、を入力してください。...

あなたは見なければなりませんecho cd ../..

バラより

答え2

bash(1)マニュアルページから:

ALIASES 
  Aliases allow a string to be substituted for a word when it is used  as
  the  first  word  of  a  simple command. [...]

したがって、bashエイリアスにはこの能力はなく、bashマイナーな能力もありませんpre-exec(しかしねえしかし、ハッカーの場合)。

として部分の回避策を使用することもできます。終わる最小限の始点である関数:

function _comp_cd() {
    local cur=${COMP_WORDS[COMP_CWORD]} # the current token
    [[ $cur =~ \.\.\. ]] && {
        cur=${cur/.../..\/..}
        COMPREPLY=( $cur )
        return
    }
    COMPREPLY=()    # let default kick in
}

complete -o bashdefault -o default -F _comp_cd cd

コマンドで Tab キーを押したときにカーソルの下のcd単語に「...」が含まれている場合、各単語は「../..」に置き換えられます。ただし、完了には小さな問題があります(複雑さを計算しません)。これは、おそらく上記で推測できるように、コマンドごとに指定する必要があるということです。

これバッシュ完成パッケージ完了関数をインスタントからロードして処理するには、デフォルトの完了ハンドラを使用します。冒険を楽しみたい場合は、代替の_filedir()「...」などの内容を含めるように、一般的なファイル/ディレクトリ拡張の内部機能を変更できる必要があります。

(これはすべて「...」を動作させるNetWareシェルを思い出させます。)

答え3

bashエイリアスは行の最初の単語に基づいてのみ機能し、zshのようにグローバルな意味では定義できません。

私が考えることができる唯一の方法は、次の変数を定義することです。

export PP=../..  # $PP meaning parent of parent
cd $PP/anotherDirectory

しかし正直言って、この場合はただ../..と入力したほうがいいです。簡単に言えば、bashはそれをしません。

関連情報