【问题标题】:Fix ssh line for Xpra bash script修复 Xpra bash 脚本的 ssh 行
【发布时间】:2013-10-13 10:58:33
【问题描述】:

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

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

我该如何解决这个小问题?

    ###                                         ###
    #       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

【问题讨论】:

  • 我不熟悉 xpra,但ssh -f $COMMAND 会打开一个 ssh 会话,询问您的凭据,然后在远程主机上启动命令时进入后台。
  • 感谢 Adam Liss,没有意识到 ssh 有一个内置选项。效果很好!

标签: bash loops ssh ping


【解决方案1】:

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

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

这会

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

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

【讨论】:

    【解决方案2】:

    正如亚当·利斯在 cmets 中提到的:

    ssh -f $COMMAND
    

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • & 将把ssh 放在后台之前它要求您提供凭据,这可能不是您想要的。请参阅我对 -f 选项的评论。
      • 另外,您应该真正使用“--start=app”开关,否则应用程序的环境将不是在 xpra 中运行的最佳环境。
      猜你喜欢
      • 2013-10-01
      • 2016-04-04
      • 2011-01-23
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2019-01-26
      相关资源
      最近更新 更多