글쎄요...너무 혼란스럽습니다. 제 경우의 유일한 문제는 아포스트로피(') 때문입니다.
상황:PATH 변수를 확장하면 추가 경로에 아포스트로피가 있는지 여부에 따라 단어 완성에 영향을 미칩니다.
예:적절한 exe 권한이 있는 exe 파일("deadbeef"라고 함)이 있는데, 해당 경로에는 2개의 아포스트로피가 포함되어 있습니다.
/home/mallniya/hard'n'soft/soft/gnu-linux/portable/deadbeef-0.6.0
특히 실험을 위해 동일한 파일을
/home/mallniya/hardnsoftaa/soft/gnu-linux/portable/deadbeef-0.6.0
첫 번째 경로를 $PATH 변수로 내보내면 bash에서는 자동 완성이 없지만 두 번째 경우에는 자동 완성이 됩니다. 내 보낸 디렉토리에 프로그램의 터미널 첫 글자를 입력하면
죽은[TAB]
첫 번째 경우에는 완성이 없지만 두 번째 조건에서 동일한 단어에 TAB을 사용하면 작동합니다.
그러나 첫 번째 경우에 "deadbeef" 명령을 수동으로 입력하면 실행됩니다.
게다가 둘 다어느그리고유형명령은 두 경우 모두 exe 파일이 존재함을 알려줍니다.
그럼 뭐가 문제야??? bash가 아포스트로피를 이렇게 처리하는 이유는 무엇입니까?
답변1
아포스트로피는 거의 모든 쉘에 대한 특수 문자입니다(쉘은 사용자가 입력한 내용을 읽고 그에 맞는 프로그램인 명령줄 해석기를 가리키는 용어입니다).
짧은 답변: 그러지 마세요. 공백의 경우 특별한 의미가 있는 파일 이름이나 특수 문자가 포함된 파일 이름은 피하는 것이 좋습니다.
긴 답변: 아포스트로피를 사용하려면 "인용하다" (쉘이 해석하는 것을 막는 특수 문자 사용). 자동 완성 기능은 필요할 때 자동으로 인용합니다... 예:
(0)samsung-romano:~/tmp/try% touch "hard'n'soft"
작은따옴표를 인용하는 한 가지 방법은 큰따옴표를 사용하는 것입니다. (그 반대의 경우도 있지만 이보다 더 복잡합니다.)
(0)samsung-romano:~/tmp/try% ls
hard'n'soft
이제 다음을 작성 cat hard
하고 누르십시오 TAB
.
(0)samsung-romano:~/tmp/try% cat hard\'n\'soft
백슬래시는 다음 문자를 인용하는 또 다른 형태입니다.
답변2
글쎄요, bash_completion 팀이 조언한 대로 저는 이 동작을 bash 팀에 보고했고 그들의 대답은 다음과 같습니다:
"신고해 주셔서 감사합니다. 이 문제는 bash-4.3에서 수정될 예정입니다."
버그는 이미 알려진 것 같으니 기다려 봐야 할 것 같습니다.
답변3
아포스트로피가 포함된 경로를 확장하려면 경로 앞에 "를 추가하세요.
cd "/home/mallniya/hard
탭 확장 시 문제 없이 확장됩니다.