と入力すると、ssh-copy-id -i ~/.ssh/
ファイルTab名拡張子が一覧表示されます~/.ssh
。
ssh-copy-id
フラグなしで-i
thenを入力すると、ファイルは拡張されSpacebarません。Tab
ssh-copy-id -x
、、、(無効なフラグであることに注意してください)を入力してもSpacebardファイルは拡張されません。Tab-x
Bashは、入力後にファイル拡張子をどのように"知っている"ですか-i
?ssh-copy-id
Bashがこれを実行できるようにプログラムをプログラムする必要がありますか?ファイル名拡張子に関するこのページとは異なるページを読みましたが、私の質問に対する答えが見つかりませんでした。
https://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html
ヒットバージョン:
GNU bash, version 4.4.20(1)-release (x86_64-pc-linux-gnu)
答え1
タブの完成はファイル名拡張とは異なります。
タブ完成インタラクティブなBashセッションのためのBash GNU Readlineの基本機能です。たとえば、変数を完成させ(try echo $SH<TAB>
)、ファイル名コマンド引数も使用します。
また、bash-completion
パッケージをインストールすると、に含まれるコマンドの完成がより/usr/share/bash-completion/completions
スマートになりますssh-copy-id
。-i
フラグにはファイルが必要なので、ssh-copy-id
タブを介してファイルを完成させます。そうでない場合、-i
ファイル提供の意味がないため、完了は行われません。
completions
繰り返しますが、これはディレクトリ内のコマンドでのみ機能します。コマンドがファイルを引数として受け入れない場合、Bashfoobar
はbash-completion
。foobar
一方、ファイル名拡張子これはPOSIXシェルの動作です。これは、シェルが対話型であるかどうかに関係なく発生します。例:コマンドに必要かどうかに関係なく、現在のディレクトリ内のすべてのファイルを展開ssh-copy-id -x *
します。*