원격 서버에서 여러 단어 인수를 사용하여 로컬 스크립트를 실행하는 방법은 무엇입니까?

원격 서버에서 여러 단어 인수를 사용하여 로컬 스크립트를 실행하는 방법은 무엇입니까?

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:

관련 정보