在远程服务器上执行带参数的bash脚本函数

在远程服务器上执行带参数的bash脚本函数,bash,Bash,我在脚本中有一个局部函数[check()],它接受参数[check CCR],并将输出存储到全局变量[$value]中。我希望在远程机器上使用参数执行该函数。这就是我所拥有的: value="" check() { exists=$(ps aux | grep "pf=" | grep -v grep | awk '{print $12}' | grep PT | grep $1 | tail -1 | awk -F= '{print $2}' | awk -F/ '{prin

我在脚本中有一个局部函数[check()],它接受参数[check CCR],并将输出存储到全局变量[$value]中。我希望在远程机器上使用参数执行该函数。这就是我所拥有的:

value=""

check() {
        exists=$(ps aux | grep "pf=" | grep -v grep | awk '{print $12}' | grep PT | grep $1 | tail -1 | awk -F= '{print $2}' | awk -F/ '{print $7}' | awk -F_ '{print $2}' | ( read x; echo ${x:0:3} ))

        if [ -z "$exists" ]; then
                value="false"
        elif [ $exists == $1 ]; then
                value="true"
        else
                value="false"
        fi
}

#check CCR
ssh remote@192.168.183.90 "$(typeset -f);check CCR"
echo $value

我没有得到任何输出回来。请告知。

基本上,您可以执行如下多行脚本:

ssh user@host <<'EOF'
function foo() {
    echo "hello $1"
}

foo bar
EOF

sshuser@host正在远程主机上设置在该函数中设置的全局变量。当然,您不能在本地主机上回显它。您可以从远程主机回显它,并在本地捕获它。正如您所说,它确实公开了其他代码,并向我返回此错误消息:位置不正确()。{:未找到命令。非法变量名称。存在:未定义变量。值=false:未找到命令。否则:endif未找到。我如何从远程回显响应并将其存储在此脚本中?是什么给了您错误消息?您发布的
typeset-f
版本?是的,与我发布的脚本相同。如果我要管道
类型eset-f
改为:
typeset-f | sshremote@xxx.xxx.xxx.xxx“$(cat);检查CCR”
我没有得到任何响应他的代码可以正确地在远程端执行函数(但在过程中可能会向远程端暴露大量其他内容),但这不是问题所在问题是变量“scope”。当然变量作用域是个问题,但是根本没有想到函数get会被执行。。让我检查一下….
typeset-f
是否将当前shell的函数转储到远程主机上正在执行的字符串中。请注意双引号。当前shell首先展开替换。哇!不知道
typeset
。谢谢!@EtanReisner你不是说
typeset
做得太多了吗?还有一件事。我正要建议函数应该回显值,而不是设置变量,然后我在ssh横幅消息中遇到了意想不到的问题。它不会像在以交互方式键入的命令中那样消失。