test.sh
원격 서버 (내 로컬 컴퓨터에 있음) 에서 스크립트를 실행하려고 합니다 . test.sh
종종 두 개 이상의 단어로 구성된 주장을 받아들입니다.
테스트.sh:
#!/bin/bash
while getopts b: opt;
do
case $opt in
b)
bval="$OPTARG"
;;
esac
done
echo $bval
내 로컬 컴퓨터에서는 잘 작동합니다.
./test.sh -b "multi word arg"
산출:
multi word arg
하지만 원격 서버에서 다음과 같이 실행할 때:
ssh -A user@remotehost "bash -s" -- < ./test.sh -b "multi word arg"
나는 단지 다음을 얻습니다:
multi
전체 다중 단어 인수를 스크립트에 전달하는 방법에 대한 아이디어가 있습니까?
답변1
다른 수준의 인용이 필요합니다.'"multi word arg"'
따옴표의 첫 번째 레이어는 로컬 셸에 의해 제거되고 ssh
가져옵니다 multi word arg
. 그런 다음 ssh
원격 시스템에서 유사한 작업을 실행합니다 $SHELL -c "bash -s -- -b multi word arg"
( $SHELL
로그인 셸이 있는 곳은 bash일 가능성이 높음). 그런 다음 로그인 쉘은 따옴표(제거할 필요 없음)와 토큰화를 제거하므로 단일 단어를 얻게 됩니다.
표시하려면:
% ssh 192.168.0.2 'printf :%s:\\n' '"foo bar baz"'
:foo bar baz:
% ssh 192.168.0.2 'printf :%s:\\n' 'foo bar baz'
:foo:
:bar:
:baz: