SSHセッションにケースの説明があるとします。変数を渡したいです。入り口リモートコンピュータから削除し、ローカルコンピュータのcsvファイルに保存します。
この例:
#!/bin/sh
set -x
read -p 'Enter the raspberry ip address you want to connect:' Rasp_id
entry=$(sshpass -pthe@Donut ssh -oStrictHostKeyChecking=no pi@"$Rasp_id" "$(cat << 'E3
cd
read -p 'Enter the case you want to configure\n 1.1 WM \n 2.1 LWM\n' option
case $option in
(1)
read -p 'config_wide_motion token' token_w_m
cat SoundEye/NoCAN/config_nocan.json
cat SoundEye/NoCAN/config_processor_motion.json
entry="1_WM"
;;
(2)
read -p 'config_laser_wide_motion token:' token_l_w_m
cat SoundEye/NoCAN/config_nocan.json
cat SoundEye/NoCAN/config_processor_motion.json
entry="1_LWM"
;;
esac
E3
)"
)
printf "$entry"
ところで私が望む効果が出ませんね。このアイテムが見たいです。1_WMまたは1_LWM最後の行が完了したら
答え1
あなたの:
entry=$(
sshpass...
)
出力をキャプチャして変数sshpass
に保存します。$entry
SoundEye/NoCAN/config_nocan.json
SoundEye/NoCAN/config_processor_motion.json
そして(接続コマンド!?を2回呼び出して)の内容を出力しcat
ます$entry
。
$entry
リモートシェル変数の内容(bash
使用しているbashに固有のように見える)を出力しないため、その変数をローカルシェル変数read -p
に送信しません。$entry
すでに構造化された(json)コンテンツを使用しているため、その情報も含めてリモートシェルに次の内容を出力できます。
printf '{ "type": "%s", "config_nocan": %s, "config_processor_motion": %s }\n' \
"$entry" \
"$(<SoundEye/NoCAN/config_nocan.json)" \
"$(<SoundEye/NoCAN/config_processor_motion.json)"
したがって、$entry
ローカルシェルにはjson
構造化データがあります。だからあなたはこれを行うことができます:
type=$(printf '%s\n' "$entry" | jq -r .type)
config_nocan=$(printf '%s\n' "$entry" | jq .config_nocan)
...
ssh
しかし、あなたの特別なケースでは、すべてのユーザー対話をローカルに維持し、必要な情報を送信するためにのみ使用する方が合理的だと思います。
答え2
私はこれが現代の安全基準を破ると思います。興味深いことに、リモートシステムにデフォルトのリスナーを作成し、ここにメッセージを投稿して操作を実行し、データを保存します。あるいは、共有ディスクを使用することもできます。