/var/iot/data
원격으로 데이터를 가져오려는 장치가 있습니다 .
기계 자체에서:
# cat /var/iot/data | xxd -ps -c 32
80de004a030270055678013ac591e5c6abac2185f4319c8088e3
이는 정확한 데이터입니다.
동일한 작업을 원격으로 실행하면 올바르게 보입니다.
$ ssh -T -x dragino 'cat /var/iot/data | xxd -ps -c 32'
80de004a030270055678013ac591e5c6abac2185f4319c8088e3
그러나 실제로는 여러 이스케이프 시퀀스를 통해 수행됩니다.
$ ssh -T -x dragino 'cat /var/iot/data | xxd -ps -c 32' | xxd
00000000: 1b5d 3131 3b23 3138 3464 3666 0738 3064 .]11;#184d6f.80d
00000010: 6530 3034 6130 3330 3237 3030 3535 3637 e004a03027005567
00000020: 3830 3133 6163 3539 3165 3563 3661 6261 8013ac591e5c6aba
00000030: 6332 3138 3566 3433 3139 6338 3038 3865 c2185f4319c8088e
00000040: 330a 1b5d 3131 3b23 3139 3139 3730 07 3..]11;#191970.
.]11;#184d6f.
애초에 이게 다 뭐였지?
답변1
순서는
OSC 1 1 ; # 1 8 4 d 6 f BEL
OSC 1 1 ; # 1 9 1 9 7 0 BEL
이것은xterm 제어 시퀀스터미널 텍스트 배경색 설정을 요청합니다. 명령의 출력을 셸 프롬프트와 구별하기 위해 이러한 파일이 출력되도록 하는 잘못 작성된 셸 초기화 파일로 인해 발생할 수 있지만 무조건 그렇게 합니다.
답변2
당신은 아마도 bash의 이상한 동작에 갇혀 있을 것입니다.초기화 파일. Bash는 .bashrc
완전히 다른 두 가지 상황에서 로드됩니다.
- 만약 그것이라면대화형 비로그인 셸.
- 로 만들어진 경우
sshd
.
따라서 SSH를 통해 로그인할 때 .bash_profile
쉘이 대화형이면 bash는 .bashrc
그렇지 않은 경우 로드됩니다. -T
에 전달해 도 이에 영향을 미치지 않으며 실제로 귀하의 경우에는 거의 영향을 미치지 않습니다. 명령을 전달하거나 에 전달하지 않으면 SSH가 터미널을 ssh
생성하기 때문입니다 .-t
ssh
귀하의 코드 .bashrc
에는 일부 이스케이프 시퀀스를 발행하여 터미널과 상호 작용하는 일부 코드가 분명히 포함되어 있습니다(구체적으로배경색 설정). 이러한 혼란을 피하려면 아무것도 실행하지 마십시오. .bashrc
혼란을 피하려면 bash가 대화형으로 실행되지 않는 경우,이걸 맨 위에 올려놔.bashrc
:
if [[ $- != *i* ]]; then return; fi
답변3
ssh
어떤 터미널이 원격인지 항상 알 수 있도록 ssh 전에 터미널 배경을 설정하는 함수가 있습니다 . 모두의 시간을 낭비해서 죄송합니다.
답변4
-T
옵션을 사용하면 ssh
원격 SSH 서버가 가상 터미널을 세션에 할당하므로 프로그램(예: 셸)이 그에 따라 작동합니다.
임의의 데이터를 전송하려면 이 -T
옵션을 무시하세요.