xterm / sh에 'sh : $'\ 302 \ 211 ... ': command not found'가 표시되는 이유는 무엇입니까?


4

때로는 'find ...'와 같은 유효한 명령을 입력하거나 실제로 무엇인가를 입력하면 다음과 같은 결과를 얻습니다. 이는 전혀 예상치 못한 혼란을 일으 킵니다. ... 명령 이름 입력) :

sh: $'\302\211...': command not found

내 생각에 약간의 부패가있다. 내 프롬프트에서 색상을 사용하지 않는, 나는 POSIX 모드에서 배쉬 셸을 사용하고있다. sh ( chsh/bin/sh 등등 - $SHELL ~이다. sh ).

무슨 일이 일어나고 있으며 왜 계속 이런 일이 일어나고 있습니까? 내가 디버깅 할 수있는 게 뭐니? 나는 이것이 더 많은 것이라고 생각한다. xterm 발행보다 sh, 또는 적어도이 둘의 조합을 포함 할 수있다.

컨텍스트에 대한 파일 :

나의 /etc/profile아치 리눅스 x86-64와 함께 배포 됨 :

# /etc/profile

#Set our umask
umask 022

# Set our default path
PATH="/usr/local/sbin:/usr/local/bin:/usr/bin"
export PATH

# Load profiles from /etc/profile.d
if test -d /etc/profile.d/; then
        for profile in /etc/profile.d/*.sh; do
                test -r "$profile" && . "$profile"
        done
        unset profile
fi

# Source global bash config
if test "$PS1" && test "$BASH" && test -r /etc/bash.bashrc; then
        . /etc/bash.bashrc
fi

# Termcap is outdated, old, and crusty, kill it.
unset TERMCAP

# Man is much better than us at figuring this out
unset MANPATH

나의 /etc/shrc, 나는 그것을 만드는 길로 창조했다. sh 비 로그인 셸일 때 시작시 일부 파일을 구문 분석합니다. 이것은 ENV 변수 설정 /etc/environment 선과 함께 ENV=/etc/shrc:

PS1='\u@\H \w \$ '
alias ls='ls -F --color'
alias grep='grep -i --color'
[ -f ~/.shrc ] && . ~/.shrc

나의 ~/.profile, 첫 번째 가상 tty를 통해 로그인 할 때 X를 시작합니다.

[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec xinit -- -dpi 111

나의 ~/.xinitc볼 수 있듯이 시스템을 Virtual Box 게스트로 사용하고 있습니다.

xrdb -merge ~/.Xresources

VBoxClient-all

awesome &

exec xterm

그리고 마침내, 내 ~/.Xresources, 여기에 멋진 것들을 나는 추측한다 :

*faceName: Inconsolata
*faceSize: 10
xterm*VT100*translations: #override <Btn1Up>: select-end(PRIMARY, CLIPBOARD, CUT_BUFFER0)

xterm*colorBDMode: true
xterm*colorBD: #ff8000
xterm*cursorColor: S_red

이후 ~/.profile 다른 것들 사이의 참조 /etc/bash.bashrc여기 내용은 다음과 같습니다.

#
# /etc/bash.bashrc
#

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

PS1='[\u@\h \W]\$ '
PS2='> '
PS3='> '
PS4='+ '

case ${TERM} in
  xterm*|rxvt*|Eterm|aterm|kterm|gnome*)
    PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'

    ;;
  screen)
    PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033_%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
    ;;
esac

[ -r /usr/share/bash-completion/bash_completion   ] && . /usr/share/bash-completion/bash_completion

나는 그것이 무엇인지 전혀 모른다. case 그런데 성명서는 조금 의심 스럽긴하지만 다시 한 번 내가 누구인지 알고 있습니다.


1
다음의 결과는 무엇입니까? ls -l /bin/sh? 또한 게시하십시오 ~/.bashrc, 문제가있을 수 있습니다. 어떤 OS입니까? 대답은 OS에 따라 다릅니다. ssh를 통해 원격 컴퓨터에 연결 하시겠습니까? 아니면이 로컬입니까? 원격 인 경우 게시하시기 바랍니다. ~/.profile 및 / 또는 ~/.bash_profile 있는 경우.
terdon

나는 모든 종류의 파일 내용으로 질문을 업데이트했으며, 충분하다고 생각합니다. 출력 ls -l /bin/sh ~이다. lrwxrwxrwx 1 root root 4 Aug 25 12:06 /bin/sh -> bash*. 나는 ~/.bashrc 내가 Bash 쉘을 소위 POSIX 모드로 돌리고 있기 때문이다. 아니 ~/.bash_profile 어느 한 쪽.
amn

답변:


2

먼저 클립 보드에서 명령을 붙여 넣으려고하면 (예 : Linux 스타일 Ctrl + 시프트 + V ) 그리고 작동하지 않을 때는 마우스로 붙이십시오. 분명히 키보드 조합은 명령 앞에 보이지 않는 문자를 삽입합니다. 해결책은 간단합니다. 키보드를 사용하여 붙여 넣거나 사용하지 마십시오. 역행 키이 마우스로 붙여 넣기 전에


1
완벽한 대답! 창문에 자식 bash 도와 줬어.
Moshe D

2

그만큼 0x89 실마리를 제공합니다 : 기본값 eightBitInput 리소스 설정, xterm 입력 된 8 비트 코드를 논리적으로 OR하여 0-127에서 128-255로 매핑합니다.

  • ~이다. ^I 0x9이고
  • 0x80과의 OR은 홀수 인 0x89를 제공합니다.

언론과 동시에 "메타"키를 누르지 않아도 문제를 해결할 수 있습니다. .

그만큼 eightBitInput 기능이 오래되었습니다 (1989 년 X11R4에서 작성). 메타 주요 기능. 훨씬 나중에 UTF-8에서 작동하도록 수정되었습니다. 패치 # 183 - 2003/12/26 - XFree86 4.3.99.903 :

  • 처리를 수정하다 eightBitInput 자원을 UTF-8 모드로 변환하여 값을 UTF-8로 변환하십시오. 그렇지 않으면 불법 UTF-8 코드가 응용 프로그램에 전송됩니다 (Bram Moolenaar의 보고서).

사용하는 사람 bash 메타 모드는 이스케이프 문자로 접두사를 붙이는 것을 가리키는 경향이 있지만 뒤로 향하게하는 경향이 있습니다. 만나다 Alt 키는 bash에서 작동하지 않습니다. ncurses FAQ에서.

네가 돌면 eightBitInput 떨어져서 이 특별한 문제는 해결되지 않습니다. xterm 보낼 것이다 탈출 당신이 누를 때 메타 , 어느 bash ...에 반대해야한다.


1

이렇게하면 문제가 해결됩니다.

setxkbmap -option "nbsp:none"

1
이것이 실제로 무엇을하는지, 그리고 그것이 어떻게 문제를 해결하는지 말하는 것이 유용 할 수 있습니다.
Journeyman Geek

1

그것은 UTF-8 인코딩의 " 정당성을 갖춘 캐릭터 대본 ".

나는 일반적으로 셸 명령 줄에서 무시되거나 셸과 터미널 에뮬레이터 사이의 로캘이 일치하지 않는 일반 탭 대신이 특수 문자를 사용하는 특정 키보드 나 편집기를 사용하고있는 것 같습니다.


죄송합니다. 나는 다음과 같지 않습니다. 사용하고 있습니다. % 어딘가에? 방법? 나는 단지 사용하고있다. vimlocale 모두를 다음과 같이보고합니다. en_US.UTF-8LC_ALL 그것은 설정되지 않았습니다. 당신의 가정을 시험하기 위해 내가 할 수있는 일은 무엇이든?
amn

@ amn : 나는 그것이 거의 확실하지 않다. 하지만 유니 코드 문자 "CHARACTER TABULATION WITH JUSTIFICATION". bash가 표시하는 코드는 UTF-8 표현 (C2 89) (U + 0089)입니다. 문제가 발생하기 전에 실수로 일부 키 (Tab?) 또는 키 조합을 누르지 않았는지 확인합니다. 의심스러운 경우 여기에서 키 조합을 시도하십시오. od -ctx1. 키 순서를 입력 한 후에 Enter와 Ctrl + D를 누릅니다.
pabouk

사실, 그것은 일반적인 것이 아닙니다. % 그러나 또한 그래픽 표현을 가진 제어 문자 (천 대 vs %). 대화 형 셸 세션 중에이 문제가 발생합니까? 탭을 사용하여 명령을 자동 완성 하시겠습니까? 키보드가 키보드를 제공하고 있습니까? 열쇠?
jlliagre

아니 그것은 무엇이든간에 내가 기술 한 오류는 무작위로 발생합니다. 그 때 탭을 사용하지 않습니다. 아니 키보드에서. od -ctx1 나에게 말한다. sh: $'\302\211\302\211\302\211od': command not found - 우리가 어딘가에 있다고 생각해!
amn

다른 터미널 에뮬레이터를 사용할 때 문제가 계속 발생합니까? 다른 컴퓨터에서 원격으로 연결할 때?
jlliagre

1

내 작업 컴퓨터에서 나는 윈도우가 있고 리눅스에서 정상적으로 실행할 명령을 실행하기 위해 git-bash CLI (mintty cygwin)를 사용한다.

나 한테 일어난 일이야. bash: $'\302\226curl': command not found Powershell 창에서 복사하여 붙여 넣기 한 후 :

$ curl -v -F foobar
bash: $'\302\226curl': command not found

어디에 육안으로는 전혀 보이지 않았고 $ curl -v -F foobar

그래서 나는 다음과 같이 명령 앞에서 모든 공백을 제거했다.

$curl -v -F foobar

그 사이에 더 이상 공백이 없다는 것에 주목하자. $

이 사람, 응원을 도울 수 있기를 바랍니다.


0

셸이 보이지 않는 문자를 해석하고 그에 대한 불평을하고 있습니다. jlliagre가 답변에서 언급 한 것과 유사합니다. 정당성을 갖춘 캐릭터 대본 .

보이지 않는 문자를 입력하지 않았다면, 쉘은 다른 곳에서 어떤 데이터를 얻고이를 입력으로 오해하고 있습니다. 즉, 버그입니다. 사용중인 터미널 에뮬레이터의 관리자에게보고해야합니다.

(나는이 문제가 4 살이라는 것을 알고 있지만 이것은 다른 사람을 도울 수있다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.