Answers:
您在这里使用两种不同的东西,应该使用第三种。让我们来看看:
|
:这是管道运算符,用于将一个过程的输出作为输入传递给另一个过程:
foo | bar
这将运行程序foo
,并将其输出作为输入传递给程序bar
。
>
,<
,>>
和<<
:这是重定向操作符,它们用于从数据发送到/ 文件:
foo > bar
:运行程序foo
并将其输出保存到文件中 bar
,覆盖1的内容并创建(如果不存在)。
foo >> bar
:运行程序foo
并将其输出保存到文件中 bar
,并追加到其内容中并创建(如果不存在)。
foo < bar
:运行foo
,告诉它从文件中 读取输入bar
。
这<<
是一种特殊情况,因为在命令的“附加”输入中没有意义,所以<<
它主要(唯一地是AFAIK)用于Here Documents:
$ cat << EOF > file.txt
> Hello World!
> EOF
构造<< SomeStringHere > Out.file
将重定向所有写入的文本,直到遇到结尾字符串(EOF
在上面的示例中)到目标文件。在这里,文档可让您轻松设置多行字符串的格式,并包含变量和特殊字符。
在<<<
操作中,这里的字符串,就像这里文档,但它扩展变量。因此,例如:
grep foo <<< "$bar"
上面的命令等效于echo "$bar" | grep foo
。
您实际上正在寻找的是进程替换,它是将命令输出传递给另一个命令的另一种方法。由组成<(command)
。
foo <(bar)
因此,at
例如,您可以
at now < <(echo "notify-send HELLO")
因为进程替换实际上创建了一个文件,上述工程(阅读上面的详细信息的链接),它是与通过该文件的文件描述符<
来at now
。
1默认行为是覆盖,可以通过将noclobber
选项设置为bash 进行修改。如果设置,echo foo > bar
将失败(如果bar
存在)。在这种情况下,可以强制使用它echo foo |> bar
。见3.6.2 这里。
<<
,以包含有关和的一些信息<<<
(@steeldriver在他的回答中提到)。此外,还有更多- >>>>>>
或<<<<<<<<<<
?
<<<
:)
在这种情况下,echo "notify-send HELLO"
是一个过程不是一个文件-所以你需要一个过程替代,而不是一个文件重定向
at now < <(echo "notify-send HELLO")
您也可以使用here字符串来echo
完全避免使用该命令
at now <<< "notify-send HELLO"
foo | bar
并bar < foo
等同。他们不是。