새소식

사용팁/shell

[ssh] 명령 주기

  • -

직접 ssh 로 접속해서 명령을 실행하면 아무래도 인수(parameter, argument)가 많아도 실행이 잘 됩니다만, 이를 원격에서 ssh 명령을 사용해서 실행하면 인수가 제대로 전달되지 않는 경우가 있습니다.

sshpass -ppassword ssh pi@localhost -p 11111 ls -al apple banana | grep apple

위와 같이 명령을 내리면 banana 이하 절이 문제가 있거나 원격이 아닌 로컬에서 해석되거나 하는 경우가 있습니다.

이런 경우 명령에 해당하는 부분을 모두 ' (따옴표) 로 감싸주면 됩니다.

sshpass -ppassword ssh pi@localhost -p 11111 'ls -al apple banana | grep apple'

다만, 명령에 따옴표가 포함된 경우 또 머리가 아픕니다.. 원격 터미널 그 자체라면 \로 escaping 시키면 되지만 로컬에서 보낼 때 그 해석이 제대로 안됩니다.

 

보통 shell 에서 작은 따옴표가 열리고 닫히지 않으면 나타날 때까지 기다립니다. 이와 유사한 증상으로 명령이 진행되지 않고 입력을 기다리는 문제가 발생합니다.

 

작은 따옴표를 꼭 사용해야 하는 경우

cmd = "sshpass -ppassword ssh pi@localhost -p 11111 \"ls -al apple banana | awk '{print $2}'\""

또는 '\'' 로 감싸면 됩니다.

sshpass -ppassword ssh pi@localhost -p 11111 'sudo vim /etc/vim/vimrc -c '\'':%s/^"au/au/'\'' -c '\'':wq'\'''

'사용팁 > shell' 카테고리의 다른 글

[bash] 디렉토리 경로명 포함한 ls  (0) 2022.03.16
[shellscript] alias 무시하기  (0) 2015.06.12
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.