私の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
CDPATH
Linuxシステムで設定を解除すると、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
(デフォルトのように見えますが)、次のこともできますcd
。nospace
complete -F _my_cd -o nospace cd