sshpass 之后的 Bash 命令未执行

sshpass 之后的 Bash 命令未执行

为什么 sshpass 之后的命令没有执行?我是否应该以某种方式发出信号表明 ssh 连接已终止?

#!/bin/bash


SCRIPT="cd /proj  
    ./run_server &                       
    sleep 2                                     
    ./run_process2 &                      
    sleep 3"                                     





if [ "$#" -ne 1 ]; then
        echo "Wrong number of arguments. usage: " $0 " name(or IP address)"
else
        sshpass -p "aaaa" ssh -o StrictHostKeyChecking=no root@"$1" "${SCRIPT}" 
        echo "123"          #< --------- This command is not executed
        python ./commands.py
fi

答案1

SCRIPT="cd /proj  
    ./run_server &                       
    sleep 2                                     
    ./run_process2 &                      
    sleep 3"                                     
...
sshpass -p "aaaa" ssh -o StrictHostKeyChecking=no root@"$1" "${SCRIPT}" 

仅当远程 SSH 服务器在脚本中运行的命令的标准输出上看到文件结束条件时,ssh 会话才会关闭。如果您希望run_serverrun_process2ssh 会话结束后继续运行,则必须确保这些进程没有保持脚本的标准输出打开。您可以通过将其标准输出重定向到其他地方来做到这一点:

SCRIPT="cd /proj  
    ./run_server > /dev/null 2>/dev/null < /dev/null &                       
    sleep 2                                     
    ./run_process2 > /dev/null 2>/dev/null < /dev/null &                      
    sleep 3"                                     

为安全起见,这会重定向所有标准文件描述符。我相信 ssh 主要关注标准输出。

相关内容