SSHセッションでリモートコンピュータで生成されたシェル変数を取得しようとしています。
echo -n "Enter the raspberry ip address you want to connect:"
read Rasp_id
sshpass -pthe@Donut ssh -oStrictHostKeyChecking=no pi@"$Rasp_id" << 'E7'
#sudo rm -r SoundEye.zip
mac_add=$(ip link show wlan0 | grep link | awk '{print $2}')
timing=$(date)
E7
echo ${mac_add}
echo ${timing}
$mac_add
ローカルコンピュータのSSHセッションで変数(この場合はand)を渡そうとします。各変数の前に置くことは役に立ちません。$timing
echo
/
echo /${mac_add}
echo /${timing}
宣言したいすべての変数の前にエクスポートを追加する場合も同様です。問題も解決しません。
ベストアンサー1
リモートホストで実行された2つのコマンドがそれぞれ1行の出力を生成するとします。
{ read mac_addr; read timing; } < <(
sshpass -pthe@Donut ssh -o StrictHostKeyChecking=no "pi@$Rasp_id" <<'SSH_END'
ip link show wlan0 | awk '/link/ { print $2 }'
date
SSH_END
)
その後、リモートコマンドによって生成された2行を2つのローカル変数mac_addr
と読み込みますtiming
。データは、read
リダイレクトプロセスの交換を介して両方の呼び出しに渡されます。
date
リモートホストのコマンドがローカルと同じ内容を出力すると仮定すると、これは簡単になります。
timing=$(date)
mac_addr=$(sshpass -pthe@Donut ssh -o StrictHostKeyChecking=no "pi@$Rasp_id" <<'SSH_END'
ip link show wlan0 | awk '/link/ { print $2 }'
SSH_END
)
そうでなければ
timing=$(date)
mac_addr=$(sshpass -pthe@Donut ssh -o StrictHostKeyChecking=no "pi@$Rasp_id" ip link show wlan0 | awk '/link/ { print $2 }' )
...awk
ローカルでコマンドを実行します。
残りのコードに関する簡単なメモ:覚えておいてください変数拡張を二重引用符で囲む、以下を使用するread
とbash
、ユーザーにプロンプトを表示できることに注意してください-p
。
read -p 'Enter the raspberry IP address you want to connect: ' Rasp_id