![원격 서버에서 여러 단어 매개변수를 사용하여 로컬 스크립트를 실행하는 방법은 무엇입니까?](https://linux55.com/image/169017/%EC%9B%90%EA%B2%A9%20%EC%84%9C%EB%B2%84%EC%97%90%EC%84%9C%20%EC%97%AC%EB%9F%AC%20%EB%8B%A8%EC%96%B4%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%A1%9C%EC%BB%AC%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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: