.NET에서 별칭으로 콜론이나 다른 접두사를 사용합니다 .bashrc
.
제가 한동안 사용했던 단축키는 다음과 같았습니다.
alias :t="tmux"
alias :www="google-chrome --use-gl=desktop &>/dev/null &"
alias :ide="bash ~/netbeans-11.3/netbeans/bin/netbeans &>/dev/null &"
alias :bsh="/bin/bash"
alias :c="clear"
alias :d="docker"
alias :dc="docker-compose"
효과가 있었습니다. 하지만 콜론으로 인해 자동 완성이 작동하지 않는 문제가 발생했습니다.
complete -F _docker :d
완료를 호출하면 :d
아무 것도 표시되지 않습니다.
충돌이었나? 어떻게 해결할 수 있나요? 충돌이 더 많이 일어날 것 같나요? 내가 뭐 잘못 했어요?
답변1
Bash에서는 콜론이 불법이 아닙니다.별명이름. 명시적으로 금지되는 문자는 , \
, "
, '
, <space>
, <tab>
, <newline>
, |
, &
, ;
, (
, )
, <
, >
, /
, 입니다 $
.`
=
당신이 가지고 있다고 가정배쉬 완료설치 후 두 가지 문제가 발생할 수 있습니다. 첫 번째 문제는 일반적으로 이름에 콜론이 있는지 여부에 관계없이 별칭과 관련이 있습니다.
완료 함수는 지연 로드됩니다.
# In a freshly opened shell $ alias bar='docker' $ complete -F _docker bar $ declare -pF _docker bash: declare: _docker: not found # Typing "bar", TAB, TAB: $ bar bash: completion: function `_docker' not found
이 문제를 해결하려면 필요한 함수를 명시적으로 로드할 수 있습니다(또는 기본 완성 함수 주위에 래퍼를 작성
_completion_loader
하고 별칭도 처리하도록 할 수 있습니다).# ...continue $ _completion_loader docker $ declare -pF _docker declare -f _docker # Typing "bar", TAB, TAB: $ bar attach container ...
독서선(라인 편집 및프로그래밍 가능한 완성Bash)에 포함된 항목을 처리합니다.
COMP_WORDBREAKS
변수는 단어 구분 기호 역할을 하며:
기본적으로PATH
콜론으로 구분된 경로 목록을 포함하는 변수에 대한 할당과 같은 사용 사례를 지원하기 위해 그 안에 배치됩니다(예:). 따라서 명령줄을
완성하려고 하면 완성 함수에 완성해야 할 잘못된 단어 배열이 제공됩니다.:foo
구체적으로,COMP_WORDS
1개의 빈 문자열 대신 빈 문자열:
이 됩니다 .foo
:foo
이것은 bash-completion에서 언급되었습니다.GitHub의 FAQ. "문제. 콜론이 포함된 작업을 완료하려고 하면 완료 오류가 발생합니다."를 참조하세요.
이 FAQ에서 제안된 유일한 해결책은 명령줄에서 콜론을 백슬래시로 이스케이프 처리하는 것입니다.
# In a freshly opened shell $ alias :foo='docker' $ complete -F _docker :foo $ _completion_loader docker # Typing "\:foo", TAB, TAB: $ \:foo attach container ...
안타깝게도 명령 앞에 백슬래시를 추가하면 Bash가 별칭 확장을 수행할 수 없어 "명령을 찾을 수 없음" 오류가 발생합니다. 그러나 별칭 대신 함수(예: )를 정의하는 옵션이 있는 경우
:d () { docker "$@"; }
이 솔루션이 작동합니다 .물론
:
from 을 제거할 수도 있지만 이렇게 하면 다음과 같이 명령줄 자동 완성이COMP_WORDBREAKS
중단됩니다 .PATH
$ COMP_WORDBREAKS=${COMP_WORDBREAKS/:/} # Typing "PATH=/bin:/", TAB doesn't complete any further: $ PATH=/bin:/