如何存储 bash 脚本 ssh 调用的响应而不是调用本身?

发布于 2024-12-01 07:18:16 字数 455 浏览 1 评论 0原文

我通过一个脚本在大约 150 台 RHEL 服务器上执行数据收集,该脚本被复制 (scp) 到每台服务器,然后通过 ssh 运行。在监视服务器上,我有:

H="ssh cshoults@ /usr/local/sc/collect.sh $SENDER $OUTPUTMETHOD "
RESULT=`$H`;
echo $RESULT;

该脚本返回以冒号分隔的九个值。然后,我使用如下内容设置九个变量:

HST=`$H | awk -F' : ' '{ print $1}`

但是,我可以通过速度判断它每次都会发送到远程服务器,而不是发送到服务器一次并将响应设置为字符串。现在已经很晚了,我对此感到恼火。有人可以帮我回答这个问题吗?如果我说 HST=$RESULT...` 它会尝试执行该命令并给我找不到命令,所以我知道这是不对的。

I'm performing data collection on about 150 RHEL servers through a script that gets copied (scp) out to each server, then run through ssh. On the monitoring server, I have:

H="ssh cshoults@ /usr/local/sc/collect.sh $SENDER $OUTPUTMETHOD "
RESULT=`$H`;
echo $RESULT;

The script returns nine values separated by colons. I'm then setting nine variables with something like this:

HST=`$H | awk -F' : ' '{ print $1}`

However, I can tell by the speed that it's going out to the remote server each time instead of going to the server once and setting the response to a string. It's late in the day and I'm getting irritated by this one. Can someone answer this for me? If I say HST=$RESULT...` it tries to execute the command and gives me command not found, so I know it's not right.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

长途伴 2024-12-08 07:18:16

如果不想每次都去服务器,就保存结果。

CMD="ssh cshoults@ /usr/local/sc/collect.sh $SENDER $OUTPUTMETHOD"
RESULT=$($CMD)
V1=$(echo $RESULT | awk -F ' : ' '{print $1}')
V2=...

If you don't want to go to the server each time, save the result.

CMD="ssh cshoults@ /usr/local/sc/collect.sh $SENDER $OUTPUTMETHOD"
RESULT=$($CMD)
V1=$(echo $RESULT | awk -F ' : ' '{print $1}')
V2=...
鹿童谣 2024-12-08 07:18:16

以下是对 Dietrich 回应的补充:

CMD="ssh cshoults@ /usr/local/sc/collect.sh $SENDER $OUTPUTMETHOD"
RESULT=$($CMD)
N=1
while [ $N -le 9 ]
do
    eval V$N=`echo $RESULT | cut -d: -f$N`
    N=`expr $N + 1`
done

Here's an enhancement to Dietrich's response:

CMD="ssh cshoults@ /usr/local/sc/collect.sh $SENDER $OUTPUTMETHOD"
RESULT=$($CMD)
N=1
while [ $N -le 9 ]
do
    eval V$N=`echo $RESULT | cut -d: -f$N`
    N=`expr $N + 1`
done
紫﹏色ふ单纯 2024-12-08 07:18:16

顺便说一句,您可以使用特殊形式的 set 拆分为 $@

# Save current IFS
oldifs=$IFS
# Temporarily set up to split on colons
IFS=:
# Split $RESULT into $@
set -- $RESULT
# Restore IFS
IFS=$oldifs
# Result is now in $1 $2 $3 etc

By the by, you can split into $@ with a special form of set;

# Save current IFS
oldifs=$IFS
# Temporarily set up to split on colons
IFS=:
# Split $RESULT into $@
set -- $RESULT
# Restore IFS
IFS=$oldifs
# Result is now in $1 $2 $3 etc
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文