代码之家  ›  专栏  ›  技术社区  ›  Nico

SSH远程命令退出代码

  •  0
  • Nico  · 技术社区  · 6 年前

    scan 是扫描给定文件中病毒的脚本)

    for i in $FILES 
    do
        RET_CODE=$(ssh $SSH_OPT $HOST "scan $i; echo $?")
        if [ $? -eq 0 ]; then
            SOME_CODE
    

    扫描正常,如果发现病毒,则返回0或1(错误为1)或2。但是我的返回码总是0。甚至,如果我扫描病毒。

    set -x

    ++ ssh -i /home/USER/.ssh/id host 'scan Downloads/eicar.com; echo 0'
    + RET_CODE='File Downloads/eicar.com: VIRUS: Virus found.
        code of the Eicar-Test-Signature virus
    0'
    

    如果我在没有ssh的“远程”机器上运行这些命令,则输出如下:

    [user@ws ~]$ scan eicar.com; echo $?
    File eicar.com: VIRUS: Virus found.
        code of the Eicar-Test-Signature virus
    2
    

    我只想有返回代码,我不需要所有的其他输出 扫描

    !更新!

    echo 这就是问题所在。

    2 回复  |  直到 6 年前
        1
  •  4
  •   Jon    6 年前

    你的原因 ssh 0 是因为决赛 echo scan 回声 或者将其赋给变量并使用 exit . 在我的系统上:

    $ ssh host 'false'
    $ echo $?
    1
    $ ssh host 'false; echo $?'
    1
    $ echo $?
    0
    $ ssh host 'false; ret=$?; echo $ret; exit $ret'
    1
    $ echo $?
    1
    
        2
  •  1
  •   Toby Speight    6 年前

    ssh echo $?

    您只需使用 宋承宪

    for i in $FILES 
    do
        if ssh $SSH_OPT $HOST "scan $i >/dev/lull 2>&1"
        then
            SOME_CODE
    

    如果您真的觉得必须打印返回代码,那么可以使用 EXIT

    for i in $FILES 
    do
        if ssh $SSH_OPT $HOST "trap 'echo \$?' EXIT; scan $i >/dev/lull 2>&1"
        then
            SOME_CODE
    

    演示:

    $ ssh $host "trap 'echo \$?' EXIT; true"; echo $?
    0
    0
    $ ssh $host "trap 'echo \$?' EXIT; false"; echo $?
    1
    1
    

    顺便说一句,我建议您在脚本中避免使用大写的变量名-这些通常用于改变程序行为的环境变量。