在Shell脚本中的竖线是什么意思?

6

我正在处理继承来的Shell脚本,遇到了一个我从未见过的语法。

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

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

现在,垂直线之前的内容是有意义的。这只是在服务器上打开和运行命令的命令。
但是,telnet 呼叫实际上是做什么的?括号和竖杠的语法是什么意思?我的最佳猜测是它打开了 telnet,然后从 telnet 中运行以下命令,但我想确定一下。
2个回答

8
括号的作用是将其中所有命令的输出分组成一个Unix 管道 |,并将其作为telnet命令的输入。但是,括号会创建一个子shell,而您不需要这样做,因此可以这样做:
{
    telnet_input_line_1
    telnet_input_line_2
    telnet_input_line_3
    (...)
} | telnet 

你甚至可以用 netcat 替换 telnet;它更适合编写脚本。

1
在这种情况下,无论您使用{...}还是(...),都会有一个子shell,因为存在管道。在许多方面,最大的区别是语法上的;I/O重定向的}必须出现在命令可以出现的地方,即分号或换行符之后,通常是在新行上。子shell的)受到的限制较少。 - Jonathan Leffler

5
|是一种“管道”,它将“open ...”文本输入到telnet中。在此处,telnet通常会从键盘读取输入,但现在它从前面的命令中读取输入。
括号将命令组合在一起,以便它们的所有输出都发送到telnet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接