キーを押しながらTabキーを押すだけでフォルダを完成できます

キーを押しながらTabキーを押すだけでフォルダを完成できます

次のディレクトリがあるとします。

 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 autocdyourと入力して.bashrcコマンドを省略して代わりに書き込むcdことができます。タブ補完は行の最初の単語に表示されます。コマンド名とディレクトリを完成させます。名前(および)を現在のディレクトリに保存します。barcd bar$PATH$CDPATH

Bash 4.0では、関数のコマンドラインバージョンを直接作成することもできます(以前のバージョンも機能しましたが、問題が発生しました)。だから本当に欲しいなら、そうすることができます。Bashコマンドの完成をカスタマイズする方法は?比較的複雑な例があります。別の例を検索して見つけてくださいREADLINE_LINEcomplete

答え2

入力後に完了しない理由は、前にコマンドを入力しないbaためですbacdBashは、bar.js<ENTER>入力または入力することがbar<ENTER>意味がないことを認識します(1つはディレクトリであり、他のファイルはディレクトリにbar.jsない$PATHか、実行権限が設定されていません)。したがって、まったく完了を提供しません。

しかし、ディレクトリ名の前に以下を付けるとcdbar

$ ls
bar  bar.js
$ cd <TAB>

この時点で、プロンプトは次のように変更されます。

$ cd bar/ # This line

関連情報