什么是这个bash重定向运算符? “&LT; <! - ” - >

时间:2012-08-06 22:56:37

标签: bash

我看到了以下bash代码:at 19:00 <<! echo "job 1"。我有两个问题:

  1. 这个重定向操作符是什么:<<!
  2. 我编写了以下脚本代码:

    at 19:00 <<!
        echo "job 1"
    
    at 20:00 <<!
        echo "job 2"
    

    当我执行此脚本时,atq命令仅显示一个作业,第一个作业。怎么了?我应该如何通过此脚本正确提交这两个作业?

2 个答案:

答案 0 :(得分:6)

来自bash reference manual

  

3.6.6此处文件

     

这种类型的重定向指示shell从当前源读取输入,直到看到只包含单词(没有尾随空白)的行。然后,读取到该点的所有行都将用作命令的标准输入。

The format of here-documents is: 
     <<[−]word
             here-document
     delimiter

所以

  1. 您不应该在word之后指定任何内容(在您的情况下为!
  2. 然后,您应在一行或多行指定at作业
  3. 最后,添加包含word的行(在您的情况下再次!

答案 1 :(得分:5)

Nya解释说,<<!here document

你应该写:

at 19:00 <<!
    echo "job 1"
!
at 20:00 <<!
    echo "job 2"
!

如果没有以!开头的行,那么这里的文档就是shell脚本的其余部分,这就是atq中只有一个命令的原因。 (但是,该命令会在它运行时安排第二个工作!)