파일 이름이 "â" 기호로 묶인 이유는 무엇입니까?

파일 이름이 "â" 기호로 묶인 이유는 무엇입니까?

alias rm='rm -i'내 파일에 추가 되면 ~/.bashrc(파일을 삭제할 때 확인을 요청하지 않기 때문에) 아래 예와 같이 파일 이름이 "â" 기호로 묶입니다.

rm: cannot remove âfile1.txtâ: No such file or directory

별칭 목록:

alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias rm='rm -i'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

노트:PuTTY를 사용하여 Windows 시스템에서 CentOS 시스템으로 SSH를 연결하고 있으므로 이는 확실히 문자 인코딩 문제입니다. 내 가상 머신에서 Ubuntu 게스트를 사용하면 모든 것이 정상입니다. 필요에 따라 둥근 따옴표가 표시됩니다.

답변1

이는 â현재 터미널이 올바르게 표시할 수 없는 UTF-8 인용문으로, ISO-8859-1 또는 이와 유사한 방식으로 구성됩니다.

일치하는 로케일 또는 POSIX 언어를 설정하여 올바른 표시를 얻을 수 있습니다.

$ rm file.txt
rm: cannot remove â  file.txtâ : No such file or directory
$ LC_ALL=en_US.UTF-8 rm file.txt
rm: cannot remove â  file.txtâ : No such file or directory
$ LC_ALL=C rm file.txt
rm: cannot remove 'file.txt' : No such file or directory

$ rm foo 2>&1 | od -c
0000000   r   m   :       c   a   n   n   o   t       r   e   m   o   v
0000020   e     342 200 230   f   o   o 342 200 231   :       N   o    
0000040   s   u   c   h       f   i   l   e       o   r       d   i   r
0000060   e   c   t   o   r   y  \n
0000067
$ LC_ALL=C rm foo 2>&1 | od -c
0000000   r   m   :       c   a   n   n   o   t       r   e   m   o   v
0000020   e       '   f   o   o   '   :       N   o       s   u   c   h
0000040       f   i   l   e       o   r       d   i   r   e   c   t   o
0000060   r   y  \n
0000063

답변2

이상한 문자를 추가하지 않았나요? .bashrc에서 사람이 읽을 수 없는 문자를 보려면 ':set list'와 함께 vi를 사용해 보세요.

"별칭"을 입력하고 운영 체제에서 사용할 올바른 구문을 나타낼 수 있는 시스템 별칭이 있는지 확인하세요. 그렇지 않으면 주로 centos와 redhat을 사용하여 별칭 구문이 이미 올바른 것으로 보입니다. 따라서 이것이 문제의 실제 원인이 아닐 가능성이 높습니다.

답변3

텍스트를 정확하게 잘라서 붙여넣었는데 일부 클립보드가 텍스트를 손상시키지 않았다면(그리고 큰 경우입니다...)

파일 이름 앞뒤에 하나의 UTF-8 문자, 2바이트, C3 A2, 즉 U+00E2, â, c3 a2, 줄임표가 있는 라틴 소문자 A가 있습니다.

명령을 실행할 때:

alias rm='rm -i'
rm spdkdkdkdlsls

나는 이것을 4.3.39에서 얻습니다 bash.

rm: cannot remove 'spdkdkdkdlsls': No such file or directory

LC_ALL=en_US.UTF_8로캘 전용 환경 변수 가 있습니다 . 하지만 주의하세요. rm파일 이름 주위에 작은따옴표를 추가하세요. 구글에 "smart quote c3 a2"라고 검색하면 찾을 수 있습니다.이 기사그리고 티그의 기사이것은 비슷한 문제를 설명하는 것 같습니다. 내 생각엔 TERMINAL, LC_ALL(또는 다른 로케일 변수) 또는 잘라내기 붙여넣기가 어떻게든 거기에 Microsoft "Word" 스타일의 "스마트 따옴표"를 가져오는 것 같습니다.

당신은 이것을 할 수 있습니까?

ls -l > files
hexdump -C files

출력을 통해 hexdump"file1.txt"가 실제로 디렉토리에 존재하는지 확인하고 디렉토리 목록에 줄임표가 있는 라틴어 소문자 A가 없음을 보여줍니다. 이는 a-irambic이 잘못되었음을 의미합니다 rm. 또는 선택한 문자 집합을 설명하려는 불행한 시도입니다.

관련 정보