リモートサーバーにリモートスクリプトがあります。
#!/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"