【问题标题】:Vertical bar in shell script?shell脚本中的竖线?
【发布时间】:2013-03-18 06:58:45
【问题描述】:

我正在处理继承的 shell 脚本,并且遇到了我以前从未见过的语法。

host = 192.[mask]
port = 2[mask]

( echo open ${host} ${port}
    ...about six other commands
  echo exit ) | telnet

现在,这对于垂直条来说是有意义的。只是在服务器上打开和运行命令的命令。

但是telnet 调用实际上在做什么?这个语法(parens 和 bar)是什么意思?我对此的最佳猜测意味着它会打开 telnet,然后从 telnet 中运行以下命令,但我想确定一下。

【问题讨论】:

    标签: bash shell telnet


    【解决方案1】:

    括号用于将其中的所有命令的输出分组到一个 Unix pipe | 中,该 Unix 进入 telnet 命令的输入。

    但是括号创建了一个子shell,你不需要任何,所以你可以这样做:

    {
        telnet_input_line_1
        telnet_input_line_2
        telnet_input_line_3
        (...)
    } | telnet 
    

    您甚至可以将telnet 替换为netcat;它更适合用于脚本目的。

    【讨论】:

    • +1:在这种情况下,无论您使用{ ... } 还是( ... ),都有一个子shell,因为管道。在许多方面,最大的区别是句法; I/O 重定向的} 必须出现在命令可能出现的位置,通常在分号或换行符之后。子shell 的) 限制较少。
    【解决方案2】:

    | 是一个“管道”,它有效地将“open ...”文本输入到telnettelnet 通常会从键盘读取输入,而不是从前面的命令中读取。

    括号将命令组合在一起,以便它们的所有输出都发送到telnet

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      • 2012-09-28
      • 2011-06-26
      • 1970-01-01
      • 2022-01-08
      相关资源
      最近更新 更多