를 입력하면 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
다시 말하지만, 이는 디렉터리의 명령 에만 작동합니다 . 명령이 파일을 인수로 허용하지 않는 경우 Bash foobar
는 bash-completion
.foobar
반면에,파일 이름 확장자이는 POSIX 쉘 동작입니다. 이는 쉘이 대화형인지 여부에 관계없이 발생합니다. 예: 명령에 필요한지 여부에 관계없이 현재 디렉터리의 모든 파일을 확장 ssh-copy-id -x *
합니다 .*