SSH를 통해 실행할 때 이상한 "sh -c" 동작

SSH를 통해 실행할 때 이상한 "sh -c" 동작

일부 명령을 실행하려고 하는데 ssh다음 동작 때문에 혼란스럽습니다 sh -c.

ssh myhost sh -c 'echo starting; who -b; date; echo $SHELL'

출력(참고: echo의 출력은 단지 빈 줄입니다!)

         system boot  2016-12-22 20:22
Thu Jan 26 06:12:52 UTC 2017
/bin/bash

그렇지 않은 경우 sh -c올바른 출력을 얻습니다.

ssh myhost 'echo starting; who -b; date; echo $SHELL'

산출:

starting
         system boot  2016-12-22 20:22
Thu Jan 26 06:18:28 UTC 2017
/bin/bash

질문:

  1. 명령이 올바르게 sh -c처리되지 않는 이유는 무엇입니까 echo starting? 빈 줄을 출력합니다.
  2. /bin/bashSHELL이 짝수 로 설정된 이유는 무엇입니까 sh -c?

답변1

여기서는 뭔가 다르고 직관적이지 않은 일이 일어나고 있습니다.

먼저, 원격 호스트에 대한 명령은 다음과 같이 구문 분석됩니다.

(sh -c echo starting); who -b; date; echo $SHELL

바깥쪽 따옴표는 제거되고 echo startingrun in 만 남게 되므로 sh$SHELL설정됩니다 /bin/bash.

둘째, 이 답변에 명시된 이유로 "시작"이 인쇄되지 않습니다.https://unix.stackexchange.com/a/253424

그러나 명령을 다른 따옴표로 묶으면 두 가지 문제를 모두 해결할 수 있습니다.

ssh myhost sh -c '"echo starting; who -b ; date; echo $SHELL"'

명령을 포함하기 위해 작은따옴표를 옮기면 더 명확해질 것이라고 생각합니다 sh.

ssh myhost 'sh -c "echo starting; who -b ; date; echo $SHELL"'

관련 정보