특정 명령 후에 Bash 자동 완성이 작동하지 않습니다.

특정 명령 후에 Bash 자동 완성이 작동하지 않습니다.

bash/Cygwin에서 graphViz를 사용하고 있는데 어떻게든 호출하면 bash 탭 자동 완성이 아무 작업도 수행하지 않습니다.

예시 파일:

  • myGraph.graphviz입력 파일입니다
  • myGraph.graphviz.png출력 파일이어야 합니다.

그래픽을 만드는 명령은 다음과 같습니다.

dot -T png -o myGraph.graphviz.png myGraph.graphviz

물론 입력하고 싶습니다.

도트 -T png -o 내 Tab.png 내Tab

파일 이름을 자동 완성하려고 해도 아무 일도 일어나지 않습니다! 입력 하면 제공되지만 이후에는 왜 작동하지 않습니까 ? Bash에는 입력할 수 있는 모든 명령에 대해 추가 자동 완성 모듈이 필요합니까?cat myTabcat myGraph.graphvizdot

답변1

Debian에서 예제 파일을 만들었습니다. 실제로 작동하지 않습니다. 그런 다음 (수동으로 완료한 후) 도 작동하지 않습니다. 두 가지 별도의 문제가 있습니다.dot -T png -o myTabdot -T png -o myGraph.graphviz.png myTab


일반 매뉴얼Graphviz 프로그램의 경우 다음을 지정합니다.

-ooutfile
파일에 출력 쓰기아웃파일. […]

내 데비안의 Bash 완성은 문자 그대로 다음을 따릅니다. 지원하는 것이 아니라 입니다 . 후자가 작동하더라도 (그리고 나는 이것을 모른다) 완성은 그것을 지원하지 않습니다. 다음과 같이 진행해야 합니다:-ooutfile-o outfiledot

도트 -T png -omyTab

뒤에는 공백이 없습니다 -o. 내 테스트에서는 위의 작업이 작동합니다.


두 번째 작품을 만들기 위해 Tab검사를 했습니다 /usr/share/bash-completion/completions/dot. 끝 부분의 관련 줄은 다음과 같습니다.

_filedir dot

이것은 하위 디렉터리와 지정할 파일을 제공하지만 이름이 .dot또는 로 끝나는 파일만 제공합니다 .DOT. 아마도 당신은 할 수수동으로이 패턴과 일치하지 않는 파일을 제공하면 아무 문제도 발생하지 않을 것입니다. 그러나 완성 메커니즘에 의존한다면 파일 이름은 올바르게 끝나야 합니다.

사실 저는 전혀 모릅니다 dot. Bash 완성에 대해서는 조금 알고 있습니다. 어쩌면 요구 사항이 의미가 없을 수도 있으며 dot허용되는 경우 완성이 더 도움이 될 것입니다.어느파일. 이 경우 원본 파일을 복사하고 /etc/bash_completion.d/복사본을 수정하므로 해당 줄은

_filedir dot

함수가 끝나면

_filedir

이는 시스템 전반에 걸친 변경 사항입니다. 변경 사항은 기존 셸에 영향을 주지 않으므로 새 셸을 시작하여 bash테스트해 보세요. 수정할 수 없거나 수정하고 싶지 않은 경우 /etc/bash_completion.d/다음을 참조하세요.이 답변. 이는 개인(사용자별)을 갖는 방법을 제공합니다 bash_completion.d/.

이 변경 사항을 사용하면 입력이 가능 하고 완성 기능이 작동합니다. 그러나 이 특별한 경우에는 내부적으로 아무 관련이 없으며 피연산자의 일반적인 완성이며 예상치 못한 또는 잘못된 옵션(예: ) 후에도 작동합니다 .dot -T png -o myTab-odot -T png -: myTab

답변2

dot실제 자동 완성 정의가 설치된 시스템에 다른 명령이 있고 해당 명령이 해당 시점에 파일을 기대하지 않는 경우 이런 일이 발생할 수 있습니다 . 알 수 없는 명령의 경우 기본적으로 모든 매개변수에 대해 파일 자동 완성이 제공되지만 특정 명령은 자체 특정 자동 완성을 설정할 수 있습니다. 확인 /etc/bash_completion하고 /etc/bash_completion.d/.

추신: 또 다른 설명은 dot자동 완성 스크립트가 문서와 일관되지 않거나 주장에 실수가 있다는 것입니다.

관련 정보