![SSH를 통해 실행할 때 이상한 "sh -c" 동작](https://linux55.com/image/103976/SSH%EB%A5%BC%20%ED%86%B5%ED%95%B4%20%EC%8B%A4%ED%96%89%ED%95%A0%20%EB%95%8C%20%EC%9D%B4%EC%83%81%ED%95%9C%20%22sh%20-c%22%20%EB%8F%99%EC%9E%91.png)
일부 명령을 실행하려고 하는데 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
질문:
- 명령이 올바르게
sh -c
처리되지 않는 이유는 무엇입니까echo starting
? 빈 줄을 출력합니다. /bin/bash
SHELL이 짝수 로 설정된 이유는 무엇입니까sh -c
?
답변1
여기서는 뭔가 다르고 직관적이지 않은 일이 일어나고 있습니다.
먼저, 원격 호스트에 대한 명령은 다음과 같이 구문 분석됩니다.
(sh -c echo starting); who -b; date; echo $SHELL
바깥쪽 따옴표는 제거되고 echo starting
run 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"'