修复Xpra bash脚本的ssh行

时间:2013-10-06 23:34:16

标签: bash loops ssh ping

我正在编写一个小脚本,用于启动与远程机器的'xpra'会话。我很擅长bash脚本编写,所以我想知道是否有人可以帮助我清理一下有关最佳实践的代码。

ssh行是我遇到问题的行,因为我必须在键盘上按CTRL-C才能杀死命令并让它继续 echo“done”

如何解决这个小问题?

    ###                                         ###
    #       syntax: xpra.sh hostmachine command   #
    ##                                          ###

    ## Wake on LAN host machine.
    ~/scripts/$1

    ## Check if online and ssh command.
    ## Attach xpra client.
    while :; do
        ping -c 1 $1
        if [ $? -eq 0 ]; then
            ssh $1 "xpra start :7 && sleep 2 && ("DISPLAY=:7 $2"&) ";
            echo "done";
            sleep 5;
            echo "attaching";
            (xpra attach ssh:$1:7 &);
            break;
        else    
            echo "host offline";
            sleep 180s;
        fi
    done

3 个答案:

答案 0 :(得分:2)

较新版本支持在一个命令中启动远程会话,请尝试:

xpra start ssh://HOST:SSH_PORT/DISPLAY --start-child=xterm

这将

  • 在DISPLAY
  • 上显示新的远程会话
  • 在其中启动xterm
  • 然后将您的客户端连接到此会话

它比依赖“睡眠”的脚本更清晰......

答案 1 :(得分:0)

要么在移动到下一行之前完成ssh行,在这种情况下你所拥有的是正确的;或者你想继续运行下一行,在这种情况下你可以附加一个“&”该行的角色:

ssh $1 "xpra start :7 && sleep 2 && ("DISPLAY=:7 $2"&) " &

(我对你的风格做出的主要评论是用“;”结束你所有的行是不必要的,如果你缩进if语句的部分,那就更清楚了。)

答案 2 :(得分:-1)

正如Adam Liss在评论中提到的那样:

ssh -f $COMMAND

将打开一个ssh会话,询问您的凭据,然后在远程主机上启动命令时进入后台。