원격 서버에 원격 스크립트가 있습니다.
#!/bin/bash
echo Parameters=$@
echo "Ciao" $1
SSH 연결을 호출하여 스크립트를 실행합니다.
❯ pippo=pluto
❯ ssh -i rsa_r [email protected] "deploy.sh $pippo"
Parameters=
Ciao
(base)"
$pippo 매개변수를 얻지 못하는 이유는 무엇입니까?
통찰력을 얻으려면 -v 옵션을 추가하십시오.
...
debug1: client_input_global_request: rtype [email protected] want_reply 0
debug1: Remote: /home/developer/.ssh/authorized_keys:6: key options: agent-forwarding command port-forwarding pty user-rc x11-forwarding
debug1: Remote: /home/developer/.ssh/authorized_keys:6: key options: agent-forwarding command port-forwarding pty user-rc x11-forwarding
debug1: Sending environment.
debug1: Sending env LANG = C.UTF-8
debug1: Sending command: deploy.sh $pippo
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype [email protected] reply 0
Parameters=
Ciao
debug1: channel 0: free: client-session, nchannels 1
Transferred: sent 3264, received 3128 bytes, in 1.5 seconds
Bytes per second: sent 2228.4, received 2135.6
debug1: Exit status 0
pippo
또한 매개변수를 대신 으로 변경해도 상관없습니다 $pippo
. 회의적인 사람들을 위해:
답변1
로컬 셸은 변수를 $pippo
value 로 확장할 수 없으며 pluto
명령 ssh
은 리터럴 문자열을 확인합니다 deploy.sh $pippo
.
debug1: Sending command: deploy.sh $pippo
원격 쉘은 이를 평가 $pippo
하고 비어 있음을 발견하여 deploy.sh
인수 없이 실행됩니다.
나는 당신이 실행하고 있는 명령이 당신이 우리에게 보여준 명령이 아니라고 제안합니다. 따옴표를 다시 확인하세요. 실제로는 큰 따옴표보다는 작은 따옴표를 사용했을 가능성이 높습니다.
그런데 스크립트에서는 사용 중인 변수를 큰따옴표로 묶어야 합니다.
#!/bin/bash
echo "Parameters=$*"
echo "Ciao $1"