【问题标题】:ksh remote function calling another remote function2ksh 远程函数调用另一个远程函数2
【发布时间】:2021-01-27 10:56:51
【问题描述】:

我在运行下面的简单代码时遇到问题:

#!/bin/ksh
set -x 

function test_me
{
set -x
date
}

function check_me 
{
set -x
ssh ${HST2} "$(typeset -f test_me); test_me"
}

ssh ${HST1} "$(typeset -f); check_me"

在第 5 行出现语法错误失败:`;;'出乎意料

【问题讨论】:

    标签: shell unix syntax ksh


    【解决方案1】:

    虽然我无法解释为什么这会给您看到您看到的特定错误消息,但至少我看到您的代码无法运行:

    首先你在一个进程中(在 HST1 上)运行命令

    function check_me 
    {
      set -x
      ssh ${HST2} "$(typeset -f test_me); test_me"
    };check_me
    

    在 HST1 上只定义了函数 check_me,没有别的。然后你运行这个check_me

    在这个函数中,你指的是两个东西:一个变量 HST2 和一个函数test_me。您的代码中没有任何内容可以定义这些实体。它们仅在执行 SSH 的初始进程中定义,但未在主机 $HST1 上的远程进程中定义。

    此外,您甚至不会在 $HST1 上运行 ksh。至少我在您的代码中没有看到和 ksh 调用。实际上,您只需将function .... 传递给$HST1,function 不是可执行文件。

    【讨论】:

    • 从 sath 我正在登录 Oracle RAC 集群。我登录 RAC1A 的第一个节点,然后准备此 RAC1 上的数据库列表,在各个节点 RAC1B、RAC1C、RAC1D 上......然后登录每个 RAC1B 并连接到 DB... $HST1 和 $HST2 只是为了隐藏主机名,您可以放置​​任何您喜欢的内容 .... SATH ==> RAC1A ===> RAC1B ... 其中 HST1 是 RAC1A 和HST2 是 RAC1B
    • 如果您有任何 3 个配对服务器,其中 ssh 密钥在 SATH ==> RAC1A ===> RAC1B 中推出,您可以测试上面的代码.. SATH ==> HST1 ===> HST2
    • #!/bin/ksh set -x function test_me { set -x date } function check_me { set -x ssh hostname2 "$(typeset -f test_me); test_me" } ssh hostname1 "$(排版 -f); check_me"
    • 你能检查下面的代码吗,我还没有得到答案。 #!/bin/ksh set -x function test_me { set -x date } function check_me { set -x ssh ${HST2} "$(typeset -f test_me); test_me" } ssh ${HST1} "$(typeset -f); check_me"
    【解决方案2】:
    #!/bin/ksh
    set -x 
    
    function second_me
    {
    set -x
    date
    }
    
    function first_me 
    {
    set -x
    ssh hostname2 "$(typeset -f second_me); second_me"
    }
    
    #from local_machine
    ssh hostname1 "$(typeset -f); first_me"
    

    在第 X 行出现语法错误失败:`;;'出乎意料

    但是如果我添加额外的虚拟函数 third_me,一切正常,看起来像 ksh 错误?

    #!/bin/ksh
    set -x 
    
    
    function third_me
    {
    set -x
    date
    }
    
    function second_me
    {
    set -x
    date
    }
    
    function first_me 
    {
    set -x
    ssh hostname2 "$(typeset -f second_me); second_me"
    }
    
    #from local_machine
    ssh hostname1 "$(typeset -f); first_me"
    

    代码运行良好

    【讨论】:

    • 你没有指出,哪一个是第X行。此外,你已经添加了很多set -x,但是没有显示这个trace的输出。
    【解决方案3】:

    使用子功能的另一种解决方法:

    #!/bin/ksh
    set -x 
    
    function first_me 
    {
    set -x
        function second_me
        {
        set -x
        date
        }
    ssh hostname2 "$(typeset -f second_me); second_me"
    }
    
    #from local_machine
    ssh hostname1 "$(typeset -f); first_me"
    

    【讨论】:

      猜你喜欢
      • 2021-11-07
      • 1970-01-01
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      • 2013-02-16
      • 1970-01-01
      • 1970-01-01
      • 2013-11-10
      相关资源
      最近更新 更多