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: