SSHセッションからローカルシステムに変数を保存して渡す方法

SSHセッションからローカルシステムに変数を保存して渡す方法

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)を渡そうとします。各変数の前に置くことは役に立ちません。$timingecho/

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ローカルでコマンドを実行します。


残りのコードに関する簡単なメモ:覚えておいてください変数拡張を二重引用符で囲む、以下を使用するreadbash、ユーザーにプロンプ​​トを表示できることに注意してください-p

read -p 'Enter the raspberry IP address you want to connect: ' Rasp_id

返品、なぜprintfがechoより優れているのですか?

おすすめ記事