【问题标题】:gnome terminal tabs open multiple ssh connectionsgnome 终端选项卡打开多个 ssh 连接
【发布时间】:2023-03-17 18:35:01
【问题描述】:

我有一个包含服务器列表的文件:

SERVERS.TXT:

    192.168.0.100
    192.168.0.101
    192.168.0.102

从一个 gnome 终端脚本,我想打开一个新终端,每个服务器都有一个选项卡。

这是我尝试过的:

gnome-terminal --profile=TabProfile `while read SERVER ; do echo "--tab -e 'ssh usr@$SERVER'"; done < SERVERS.TXT`

这是错误:

无法解析参数:“--command/-e”的参数不是有效命令:文本在找到匹配的引号之前结束。 (文本是''ssh')

尝试删除 -e 后的空格

gnome-terminal --profile=TabProfile `while read SERVER ; do echo "--tab -e'ssh usr@$SERVER'"; done < SERVERS.TXT`

我得到一个类似的错误:

无法解析参数:“--command/-e”的参数不是有效命令:文本在找到匹配的引号之前结束。 (文本是'usr@192.168.0.100'')

显然存在解析错误,因为 shell 试图通过使用空格来预测和放置分隔符来提供帮助。服务器文件更改恕不另行通知,需要查看许多不同的服务器集。

【问题讨论】:

    标签: shell ssh tabs gnome gnome-terminal


    【解决方案1】:

    我在寻找 OP 所遇到问题的答案时发现了这个问题,但我的问题有点不同。我知道服务器列表,它们不在文件中。

    无论如何,发布的其他解决方案对我不起作用,但以下脚本确实有效,并且是我用来解决 "--command/-e" is not a valid command" 错误的方法。

    脚本应该很容易更改以适应任何需要:

    #!/bin/sh
    # Open a terminal to each of the servers
    #
    # The list of servers
    LIST="server1.info server2.info server3.info server4.info"
    cmdssh=`which ssh`
    
    for s in $LIST
    do
        title=`echo -n "${s}" | sed 's/^\(.\)/\U\1/'`
        args="${args} --tab --title=\"$title\" --command=\"${cmdssh} ${s}.com\""
    done
    
    tmpfile=`mktemp`
    echo "gnome-terminal${args}" > $tmpfile
    chmod 744 $tmpfile
    . $tmpfile
    rm $tmpfile
    

    现在最大的问题是,为什么在从文件运行时它会起作用,而不是从脚本中运行。当然,问题在于 --command 部分的转义,但我尝试的一切都失败了,除非导出到临时文件。

    【讨论】:

      【解决方案2】:

      我会尝试类似:

      $ while read SERVER;do echo -n "--tab -e 'ssh usr@$SERVER' "; \
        done < SERVERS.txt | xargs gnome-terminal --profile=TabProfile
      

      这是为了避免 shell 可以对参数进行任何解释(以破折号开头的任何内容)。

      因为是连接字符串(使用-n),所以需要在它们之间加一个空格。

      【讨论】:

        【解决方案3】:

        这是解析命令行选项的问题吗?有时,如果您有一个命令向另一个命令发送参数,第一个命令可能会感到困惑。惯例是像这样使用--

        echo -- "--tab -e 'ssh usr@$SERVER'";
        

        【讨论】:

          【解决方案4】:

          尝试输入

          评估

          在 gnome 终端命令之前。

          应该是这样的:

          eval /usr/bin/gnome-terminal $xargs
          

          为我工作!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-09-30
            • 2010-11-14
            • 2018-06-28
            • 2014-11-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多