BashでCDPATHを使用してパスの自動補完を防止しますか?

BashでCDPATHを使用してパスの自動補完を防止しますか?

私のMacでは、bash(バージョン3.2.53(1))はコマンドライン引数にファイルオートコンプリートを使用します。ただ現在のディレクトリにあります。

作業中のLinuxシステムでは、bash(バージョン4.1.2(1))は現在のディレクトリのファイルを使用してコマンドライン引数を自動補完します。そして親ディレクトリ。

たとえば、ディレクトリツリーは次のようになります。

/home/pjl/
    bin/
    foo/
        book/

私のMacでは、次のことを行います。

$ cd foo
$ cd b<TAB>
$ cd book

バッシュオートコンプリートただ到着するbook。ただし、Linuxシステムで同じことを行うと、次のようになります。

$ cd foo
$ cd b<TAB>
bin book
$ cd b

bashには2つのオプションがあります:book現在のディレクトリからそして bin親ディレクトリから。

Bash オートコンプリートの作成方法ただ現在のディレクトリを使用しますか?

存在する両方マシンはCDPATH次のように設定しました。

.:..:../..:../../..:../../../..:../../../../..:/home/pjl/src:/home/pjl

CDPATHLinuxシステムで設定を解除すると、bashは次のように自動的に実行します。ただ現在のディレクトリ(私が望むもの); LinuxではbashがCDPATH

CDPATHしかし、どのように設定を維持できますか(so'ingはcd以前のように動作します)。いいえCDPATHオートコンプリートにbashを使用しますか?


別の許容される動作はオートコンプリートです。好意現在のディレクトリと使用法CDPATH そして、もし現在、ディレクトリに一致するものはありません。

ベストアンサー1

~/.bashrc正しい方法は、上記で提案した@Gillesのように、以下を使用することです(ここではより短いバージョン)。

_my_cd () { CDPATH= _cd "$@";}

CDPATHより良いアプローチは、ローカルで一致するものがないことを確認することです。

_my_cd () { CDPATH= _cd "$@"; if [ -z "$COMPREPLY" ]; then _cd "$@"; fi;}

これにより、手間をかけずにプログラムで実行できる機能を実現できます。忘れないで

complete -F _my_cd cd

/usr/share/bash-completion/bash_completion何らかの理由で-o nospace(デフォルトのように見えますが)、次のこともできますcdnospace

complete -F _my_cd -o nospace cd

おすすめ記事