次のディレクトリがあるとします。
foo/
bar.js
bar/
fooに入り、cd
「ba」と入力してタブを押すと、ファイル名がフォルダと重なって完了できません。
フォルダ(またはファイル)のみを提供するタブを押し続けることができるキーはありますか?
答え1
TL、DR:. /etc/bash_completion
に追加してください.bashrc
。
正確な質問に答えるために、そのような組み込みコマンドはありません。バッシュ注文するさまざまな種類のオブジェクト(ファイル名、ユーザー名、変数名など)を完成させますが、ディレクトリに限定されません。
ただし、古代バージョンのbashを実行しない限り、次のものを使用できます。状況に合った完成、2000年にリリースされたバージョン2.04に追加された機能です。一部のディストリビューションではデフォルトで有効になっているため、インストールする必要があります。bash-completion
パッケージ化して~/.bashrc
。ほとんどのディストリビューションでは、というパッケージを提供し、bash-completion
ここにアクティベーションスクリプトを配置します/etc/bash_completion
。つまり、.bashrc
次の行を含める必要があります。
. /etc/bash_completion
cd
以降は を入力して を押すとディレクトリ名だけが完成しますTab。
非旧バージョンのbash(≥4.0)を使用している場合は、shopt -s autocd
yourと入力して.bashrc
コマンドを省略して代わりに書き込むcd
ことができます。タブ補完は行の最初の単語に表示されます。コマンド名とディレクトリを完成させます。名前(および)を現在のディレクトリに保存します。bar
cd bar
$PATH
$CDPATH
Bash 4.0では、関数のコマンドラインバージョンを直接作成することもできます(以前のバージョンも機能しましたが、問題が発生しました)。だから本当に欲しいなら、そうすることができます。Bashコマンドの完成をカスタマイズする方法は?比較的複雑な例があります。別の例を検索して見つけてくださいREADLINE_LINE
。complete
答え2
入力後に完了しない理由は、前にコマンドを入力しないba
ためですba
。cd
Bashは、bar.js<ENTER>
入力または入力することがbar<ENTER>
意味がないことを認識します(1つはディレクトリであり、他のファイルはディレクトリにbar.js
ない$PATH
か、実行権限が設定されていません)。したがって、まったく完了を提供しません。
しかし、ディレクトリ名の前に以下を付けるとcd
:bar
$ ls
bar bar.js
$ cd <TAB>
この時点で、プロンプトは次のように変更されます。
$ cd bar/ # This line