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

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

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:

관련 정보