0

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

ssh 行是我遇到的问题,因为我必须在键盘上按 CTRL-C 才能杀死命令并让它继续回显 "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
4

3 回答 3

2

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

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

这将

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

它比依赖“睡眠”的脚本要干净得多......

于 2013-12-03T08:28:03.843 回答
0

要么您希望 ssh 行在移至下一行之前完成,在这种情况下您所拥有的是正确的;或者您想在它仍在运行时移至下一行,在这种情况下,您可以在该行附加一个“&”字符:

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

(我对你的风格的主要评论是你所有的行都用“;”结束是不必要的,如果你缩进你的if陈述的部分会更清楚。)

于 2013-10-07T00:34:53.433 回答
-1

正如亚当·利斯在评论中提到的那样:

ssh -f $COMMAND

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

于 2013-10-18T18:47:02.047 回答