【发布时间】:2021-03-22 22:19:12
【问题描述】:
以下代码循环遍历数组中的状态,并通过 ssh 将状态传递给服务器 -
STATES="NY CO"
arr_states=(${STATES//' /'/ })
for i in "${arr_states[@]}"; do
state=$i
ssh -o SendEnv=state jenkins@server sh -s << 'EOF'
sudo su
cd /home/jenkins/report
psql -d db -c "$(sed 's/state_name/'"$state"'/' county.sql)" -U user
echo $state
EOF
done
上面echo $state的输出即使我传递NY也是一个空字符串。
当我将'EOF' 更改为EOF 时,echo $state 的输出是我传递的字符串 (NY)。但随后它说,文件county.sql 不存在。
如何让它识别我传递的变量和我试图运行的远程文件。
【问题讨论】:
-
真的需要向我们展示 STATES 里面有什么。
-
这绝对不正确 - 尝试将状态设置为
arr_states=( CO NY )- 给出您期望的输出类型(其中 $state 有一个值)。 -
是否有令人信服的理由使用
sh -s而不是bash -s?许多 bash 以编程方式生成可安全执行的代码的机制只有在接收 shell 也是 bash 时才有效。