붙여넣은 입력은 어디로 가나요?

붙여넣은 입력은 어디로 가나요?

일련의 셸 명령을 복사하여 터미널 에뮬레이터에 붙여넣고 있는데 동작이 혼란스럽습니다.

  • 한 줄을 붙여 넣으면 ssh user@remote "echo foo"; echo baz컴퓨터가 예상대로 작동합니다. SSH 명령을 실행한 다음 SSH 세션이 끝나면 무언가를 에코합니다.
  • 그런데 여러 줄 명령으로 같은 내용을 붙여넣으면 이런 일이 발생하지 않습니다.
    ssh user@remote "에코 foo"
    에코 버즈
    여전히 SSH 세션을 볼 수 있지만 echo baz완전히 사라졌습니다. 어떤 명령도 실행되지 않았습니다.
  • 이것은 적어도 SSH와 관련된 것 같습니다. SSH를 다른 것으로 바꾸면 실제로 예상되는 동작이 발생하기 때문입니다. 이 명령을 붙여넣으면 두 명령이 모두 실행됩니다. 예를 들면 다음과 같습니다.
    에코 리치
    에코 버즈

그럼 정확히 무슨 일이 일어났나요? 붙여넣은 입력은 어디로 가나요? echo 명령이 실행되지 않는 이유는 무엇입니까?아무것? 이것이 SSH와 어떤 관련이 있습니까?

Ctrl(참고: 나는 + X, Ctrl+ 방법을 알고 있지만 E때로는 특히 Windows에서 터미널 에뮬레이터를 사용할 때 기본적으로 작동하지 않습니다.)

답변1

다음을 붙여넣어 보세요.

ssh user@host 'read foo; echo ">>$foo<<"'
echo bar

서버에서 출력을 볼 수 있습니다 >>echo bar<<.echo

이는 ssh여러분이 했던 것처럼 표준 입력에 붙여넣은 데이터를 먹는다는 뜻입니다.

echo 'echo bar' | ssh user@host 'read foo; echo ">>$foo<<"'

이 문제에 대한 해결책은 다음 으로 ssh -n리디렉션되는 을 사용하는 것 입니다 ./dev/nullssh

ssh -n user@host 'echo foo'
echo bar

안타깝게도 붙여넣기 메커니즘을 모르기 때문에 영리한 말은 할 수 없습니다.붙여넣은 데이터는 stdin 스트림으로 끝나지만 ssh(stdin에서 명령을 읽는) 대화형 셸에서 상속된 스트림과 관련이 있는 것으로 추측됩니다.


사용하는 것도 ssh -n해결책입니다(또는 적어도해결) 문제

while read something; do
    ssh user@host 'somecommand'
done <inputfile

여기서 루프는 ssh의 데이터를 먹기 때문에 한 번만 실행됩니다 inputfile.

관련 정보