
.bash_profile
대화형 환경의 원격 셸에서 명령을 실행하여 명령을 실행하기 전에 먼저 원격 셸을 로드하고 싶었습니다 .
이것은 훌륭하게 작동합니다:
echo "command" | ssh user@remote_host
[1]
하지만 오류가 발생합니다.
stdin이 터미널이 아니기 때문에 의사 터미널은 할당되지 않습니다.
위의 명령이 내 목적에 잘 작동하기 때문에 이것이 문제인지는 모르겠지만 여전히 문제를 해결할 수 있는 해결책을 찾다가 발견했습니다.
ssh -t -t
[2]
echo "command" | ssh -tt user@remote_host
그것들을 결합하면 훌륭하게 작동하는 것을 얻을 수 있습니다 .
하지만 Git bash에서 이상한 이유로 명령 실행을 마치고 돌아온 후에는 더 이상 입력할 수 없습니다. 잘 작동하는 Cygwin에서 테스트했는데 이 문제가 있는 것은 Git bash뿐입니다.
exit
원격 셸에 여전히 보이지 않게 붙어 있지만 아무 것도 작동하지 않는 경우를 대비해 입력을 시도했습니다 .
ssh -tt
Git bash에서 수행할 때 문제가 될 수 있는 아이디어가 있습니까 ?
답변1
"의사 터미널은 할당되지 않습니다." 메시지는 단지 정보 제공용일 뿐입니다. 실행 중인 명령에 터미널이 필요하지 않은 경우 -T
PTY 할당을 비활성화하고 메시지를 종료하는 옵션을 사용하여 ssh를 실행하는 것이 좋습니다 .
귀하의 지역 TTY가 어떤 이유로 이상한 상태에 남아 있는 것 같습니다. 실행하면 stty sane
터미널이 사용 가능한 상태로 재설정됩니다. 입력할 수 없다고 말씀하셨지만 다음과 같이 시도해 볼 수도 있습니다.
- 현재 있을 수 있는 Ctrl-S/Ctrl-Q 일시 중지를 취소하려면 Control-Q를 입력합니다(즉, "Control" 키를 누른 채 "Q" 누르기).
- Control-J를 입력하세요. 이는 쉘이 새 명령줄을 읽을 준비가 되었는지 확인하는 리터럴 개행 문자입니다.
- "stty sane"을 입력한 다음 Control-J를 다시 입력하세요. 입력한 내용이 화면에 나타나지 않더라도 시도해 보세요.
그래도 작동하지 않으면 핵 옵션은 다른 터미널의 붙어 있는 TTY에서 "stty sane"을 실행하는 것입니다.
- 다른 터미널 창을 엽니다.
- "ps"를 사용하여 정체된 세션이 어떤 PTY에 있는지 알아보세요.
stty sane
PTY에서 리디렉션된 입력으로 실행합니다 .
예를 들어 Linux에서는 다음과 같습니다.
$ ps -fu jdoe
...
jdoe 2083 2080 0 22:17 pts/0 00:00:00 /bin/bash <-- TTY is "/dev/pts/0"
$ stty sane < /dev/pts/0