'End' shell 脚本中的命令

'End' command in shell script

我正在尝试理解 shell 脚本的一部分,这让我很困惑。

这是片段。我的问题是:

a) <<- 做什么?是不是很标准的表达方式。我只知道 >>>< 用于重定向。

b) End 是什么意思?我假设从 'n' 到 'somefilename.dat.summary' 的所有值都是发送到脚本 'collapse4' 的某种输入,它的输出被重定向到 /dev/null 我了解到的是我们发送不需要的数据的地方。

/usr/can/bin/collapse4<<-End > /dev/null
n
n
1
9 14
y
1
26
8
30
8
1
23
3
1
n
n
y
n
n
somefilename.dat
somefilename.dat.summary
End

此命令将文本块发送到 /usr/can/bin/collapse4 并将输出重定向到 /dev/null

此结构在此处称为 doc。 End 是您 "call" 您将要插入的文本的方式。完成后,您可以在新行的最开头用相同的词指示块的结尾。

但你可以随便叫它。这会做同样的事情:

/usr/can/bin/collapse4<<-HelloJustTesting > /dev/null
n
n
1
...
n
somefilename.dat
somefilename.dat.summary
HelloJustTesting

更多信息见How can I write a here doc to a file in Bash script?

In a shell script, you may want to use indentation to make the code readable, however this can have the undesirable effect of indenting the text within your here document. In this case, use use <<- (followed by a dash) to disable leading tabs (Note that to test this you will need to replace the leading whitespace with a tab character, since I cannot print actual tab characters here.)