gpt4 book ai didi

shell - 在shell脚本中使用ssh变量

转载 作者:行者123 更新时间:2023-12-02 14:04:06 25 4
gpt4 key购买 nike

我想在shell脚本中使用ssh的变量。
假设我有一个变量值,我在ssh内获取了该变量的值,现在我想在 shell 本身中的ssh之外使用该变量,我该怎么做?

ssh my_pc2 <<EOF
<.. do some operations ..>
a=$(ls -lrt | wc -l)
echo \$a
EOF
echo $a

在上面的示例中,ssh打印10内的第一回显打印10,但是第二回显$ a不打印任何内容。

最佳答案

我会通过定义一些特殊的语法以将所需的设置传回来优化最后一个答案,例如“#SET var=value

我们可以将命令(要在ssh session 中运行)放置在cmdFile文件中,如下所示:

a=`id`
b=`pwd`
echo "#SET a='$a'"
echo "#SET b='$b'"

并且主脚本如下所示:
#!/bin/bash

# SSH, run the remote commands, and filter anything they passed back to us
ssh user@host <cmdFile | grep "^#SET " | sed 's/#SET //' >vars.$$

# Source the variable settings that were passed back
. vars.$$
rm -f vars.$$

# Now we have the variables set
echo "a = $a"
echo "b = $b"

如果对大量变量执行此操作,则可以向cmdFile添加一个函数,以简化/封装用于将数据传回的特殊语法:
passvar()
{
var=$1
val=$2
val=${val:-${!var}}
echo "#SET ${var}='${val}'"
}

a=`id`
passvar a
b=`pwd`
passvar b

当值包含空格时,您可能需要使用引号。

关于shell - 在shell脚本中使用ssh变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23076280/

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