假设 SSH 会话中有一个 case 语句。我想传递变量入口从远程计算机中删除并将其存储在本地计算机的 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
(使用 con enating 命令的两次调用cat
!?),所以这就是$entry
.
您没有输出$entry
远程 shell 变量的内容(这似乎是bash
您正在使用特定于 bash 的read -p
),因此它不会将其发送到$entry
本地 shell 的变量。
由于您已经在使用结构化 (json) 内容,因此您也可以在其中包含该信息,并在远程 shell 中输出如下内容:
printf '{ "type": "%s", "config_nocan": %s, "config_processor_motion": %s }\n' \
"$entry" \
"$(<SoundEye/NoCAN/config_nocan.json)" \
"$(<SoundEye/NoCAN/config_processor_motion.json)"
所以$entry
你的本地 shell 将有一些json
结构化数据。所以你可以这样做:
type=$(printf '%s\n' "$entry" | jq -r .type)
config_nocan=$(printf '%s\n' "$entry" | jq .config_nocan)
...
ssh
不过,在您的具体情况下,我认为将所有用户交互保留在本地并且仅用于传输您想要的信息会更有意义。
答案2
我认为这会打破现代安全标准。有趣的是,我会在远程计算机上创建本机侦听器,并向其发布一条消息以进行操作,存储您的数据。或者您只需使用共享磁盘。