4

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

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

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

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


来自bash 参考手册

3.6.6 这里文档

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

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

所以

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

2 回答 2

6

来自bash 参考手册

3.6.6 这里文档

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

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

所以

  1. 您不需要在word(在您的情况下!)之后指定任何内容
  2. 然后您应该at在一行或多行上指定作业
  3. 最后,添加一行包含word(再次,在您的情况下!
于 2012-08-06T23:06:35.020 回答
5

正如 Nya 解释的那样,这<<!是一个此处的文档。

你应该写:

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

如果没有以 开头的行!,您的此处文档就是 shell 脚本的其余部分,这就是为什么atq. (但是,该命令在运行时会安排第二个作业!)

于 2012-08-06T23:23:39.423 回答