백 스페이스, 탭이 터미널에서 작동하지 않음 (ssh 사용)


37

내 계정으로 subian 권한을 가진 Debian을 사용하여 다른 컴퓨터에 ssh를 넣으면 백 스페이스 키가 눌릴 때 어색한 기호를 생성합니다. 또한 Tab& del키도 작동하지 않습니다.

다른 한편으로, 나는 또한 같은 컴퓨터에 다른 계정을 가지고 있으며이 계정을 ssh하면 터미널이 완벽하게 작동합니다. 왜 이런 일이 일어나는지 알 수 없었습니다.

답변:


37

나는 전에 그런 문제를 보았다.

예를 들어, 백 스페이스를 사용하면 원격 호스트는 일부 문자가 "삭제 / 백 스페이스"로 사용될 것으로 예상하지만 터미널에서 백 스페이스를 누르면 원격 호스트가 차이점을 예상하는 경우 터미널 프로그램이 일부 문자를 원격 호스트에 보냅니다. 터미널 프로그램에서 전송 한 문자에서이 문제가 발생합니다. 따라서 빠른 수정은 다음과 같습니다.

  1. #stty -a원격 호스트에서 명령 을 실행 하고 출력에서 ​​지우기 코드로 예상되는 것을 찾으십시오. 말해봐 erase=^?.
  2. 터미널에서 Ctrlv백 스페이스를 입력 하고 누릅니다. 어떤 코드가 "삭제"로 전송되는지 확인할 수 있습니다. 말해봐 ^H.
  3. 원격 호스트에서을 실행하십시오 #stty erase ^H.
    (참고 : Ctrlv+ 사용 Backspace, ^를 수동으로 입력하지 마십시오)

위와 동일한 방법으로 탭 문제를 해결할 수 있습니다.


내 백 스페이스 문자는 역 삼각형과 같은 특수 기호입니다. 그래서 작동하지 않습니다
gopi1410

1
이 간단한 의견은 확실히 내가 본 최고의 솔루션입니다. 그것은 kludge처럼 느껴지지만 작동합니다.
Paulo Matos

이것은 나를 위해 일했다! 비록 내가 이해하지 못하는 것은 쉘이 예상대로 백 스페이스를 처리하는 이유이지만 내 앱의 stdin에서 읽는 것은 그렇지 않습니다. 제안 된 변경을 수행하면 백 스페이스가 모두 작동합니다. 내 이해는 쉘이 stdin 버퍼링을 처리한다는 것이므로 백 스페이스 처리가 쉘과 앱 모두에서 동일하지 않아야합니까?
사무엘

1
코드를 전혀 보내지 않으면 어떻게됩니까? Ctrlv + 백 스페이스는 아무 것도 생성하지 않습니다.
Manfredo

35

"stty"솔루션 외에도 "TERM"솔루션을 사용해보십시오.

TERM 환경 변수를 통해 일부 터미널 (putty, solaris dterm, debain xterm, you-name-it)에서 데비안으로 ssh를 보낼 수 있습니다.

따라서 유닉스 호스트에 ssh 후 (데비안이나 다른 호스트에 의존하지 않음) 터미널에 따라 TERM 변수를 설정하십시오. bash를 쉘로 사용하고 vt100을 터미널로 사용한다고 가정하십시오.

export TERM=vt100

추신 : TERM은 자동으로 ssh를 통해 발표되어야하지만 어떤 상황에서는이 마술이 실패합니다.


여전히 작동하지 않습니다 :(
gopi1410

어떤 터미널을 사용하고 있습니까? 그리고 당신이 시도한 TERM의 가치는 무엇입니까?
paul

나는 vt100을 시도했다. TERM의 가치를 어떻게 알 수 있습니까? cygwin (Windows)에서 Debian으로 ssh를 시도했습니다. cygwin에 문제가 있다면 우분투 터미널에서도 시도했지만 동일한 문제입니다.
gopi1410

cygwin에 터미널 에뮬레이션이 있는지 확실하지 않습니다. 내가 아는 한 cygwin은 터미널 에뮬레이션이없는 일반 Windows 콘솔을 사용하고 있습니다 (잘못된 것일 수 있습니다). 우분투에서 모든 것이 잘 작동합니다. 데비안의 쉘 또는 termcap 라이브러리에 문제가 있습니다. 우분투에서 로그인하여 다음 명령을 출력하십시오 : 1. echo $ TERM 2. stty -a
paul

2
TERM이 올바르게 설정 되었기 때문에 이것이 직접 도움이되지는 않았지만 문제를 식별하는 데 도움이되었습니다. 터미널에 대한 terminfo 항목이 누락되었습니다. urxvt를 사용하고 있으며 아치에서이 특정 문제를 해결하려면 rxvt-unicode-terminfo를 설치해야합니다.
Xandaros

15

기본 쉘이 sh사용하기 위해 쉘에서 bash실행 bash하기 때문입니다.

bash

bash기본 쉘로 설정하려면 다음 을 수행하십시오.

chsh -s /bin/bash 

또는

sudo chsh -s /bin/bash yourusername

2
이것은 나를 위해 그것을 고쳤다. 내 로그인 쉘을 보지 않아도!
제임스 팩

2
이 문제가 발생하지만 쉘은 bash입니다.
fraxture

6

쉘이 /bin/sh대신 으로 설정되었을 수 있습니다/bin/bash


1
이 답변과 관련이 있습니다 : unix.stackexchange.com/questions/50542/…
Samuel


조금 더 설명하고 변경하는 방법이 도움이 될 것입니다. 그러나 그것은 제가 가진 문제였습니다. 나를 위해 문제를 해결 한 귀하의 링크에 감사드립니다.
Jake

이것이 제 경우에는 그 이유였습니다. 그 특정 사용자를위한 것입니다. 에 그의 쉘에 /etc/passwd추가 :/bin/bash할 때 쉘이 정의되지 않았습니다 . 어떤 쉘을 사용하고 있는지 알 수 있습니다echo $0
MSpreij

6

나는 보통 이것을 사용하여 터미널의 펑키 문자 출력을 수정합니다. 모든 특수 문자를 기본값으로 재설정합니다.

stty sane

stty 매뉴얼 페이지에서 :

cread -ignbrk brkint -inlcr -igncr icrnl -iutf8 -ixoff -iuclc -ixany imaxbel opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten 에코 에코 노크-echonf -xcase -tostop -echoprt echoctl echoke, 모든 특수 문자를 기본값으로 설정


2

다채로운 답변을 유지하려면 xterm-88color를 사용하십시오.

echo 'export TERM=xterm-88color' >> ~/.bashrc
source ~/.bashrc

1
toe -a지원되는 터미널 유형 목록을 보여줍니다 ... xterm-88color유일한 옵션은 아니며 실제로 특정 시스템에서 사용하지 못할 수도 있습니다.
0xC0000022L
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.