직접 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'\'''
'IT > shell' 카테고리의 다른 글
[linux][bash] 파일 크기 감시하기 (0) | 2024.11.11 |
---|---|
[bash] 디렉토리 경로명 포함한 ls (0) | 2022.03.16 |
[shellscript] alias 무시하기 (0) | 2015.06.12 |