gpt4 book ai didi

bash - 通过 ssh 使用本地和远程值执行多个命令

转载 作者:行者123 更新时间:2023-11-29 09:21:45 25 4
gpt4 key购买 nike

我正在编写一个脚本来匹配本地值和远程值。截至目前,我的代码可以正常运行,如下所示:

#!bin/bash

MY_ARRAY=('value1' 'value2' 'value3' 'wrongValue)
for VALUE in "${MY_ARRAY[@]}"
do
if [[ $VALUE =~ ^v ]] ; then
echo "$VALUE : $(ssh admin@machine matching_function $VALUE)" >> output.file
else
echo "$VALUE : this is a wrong value" >> output.file
fi
done

唯一的问题是对于循环的每次迭代,它都会创建并关闭一个新的 ssh 连接。由于我的原始数据集很大,因此需要很长时间才能执行。

我一直在寻找一种优化方法,并阅读了有关使用 ssh admin@machine <<EOF 将多行命令传递给 ssh 的内容并调整我的代码:

MY_ARRAY=('value1' 'value2' 'value3' 'wrongValue)
ssh admin@machine << EOF
for VALUE in "${MY_ARRAY[@]}"
do
if [[ $VALUE =~ ^v ]] ; then
echo "$VALUE : $(matching_function $VALUE)" >> output.file
else
echo "$VALUE : this is a wrong value" >> output.file
fi
done
EOF

但是,它不起作用,我收到了几个错误:

  • Pseudo-terminal will not be allocated because stdin is not a terminal. .我怀疑这部分是由于我的远程 shell 受到限制,并且它与 echo 冲突。 .

  • $MY_ARRAY 似乎在远程机器上未分配:

    -rbash: line 5: conditional binary operator expected
    -rbash: line 5: syntax error near unexpected token '^v'
    -rbash: line 5: ' if [[ =~ ^v ]] ; then'

我也不确定 bash 将如何区分 $VALUE ,应该从我的本地计算机解释,和 matching_function ,应该从远程解释

最佳答案

man ssh:

If command is specified, it is executed on the remote host instead of a login shell.

人们可能会告诉您,您可以通过使用不同数量的 -t 来强制分配伪 tty,这确实有效,但会带来运行登录 shell 的副作用,因此它可能会更好只是做

ssh admin@machine bash <<EOF
...
#some instructions
...
EOF

而不是强制不执行登录 shell。

关于bash - 通过 ssh 使用本地和远程值执行多个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23424030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com