Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix和tee—;指挥链_Unix_Shell_Tee - Fatal编程技术网

Unix和tee—;指挥链

Unix和tee—;指挥链,unix,shell,tee,Unix,Shell,Tee,在Unix环境中,我希望在如下命令链上使用tee: $ echo 1; echo 2 | tee file 1 2 $ cat file 2 为什么文件最终只有来自最终命令的输出 在本次讨论中,假设我不能将它们分开并分别运行命令。它只有第二个命令的输出,因为分号表示shell的新语句 把它们放在括号里: (echo 1; echo 2) | tee file 尝试: 如果没有括号,它将被解析为: echo 1 ; ( echo 2 | tee file ) 除了创建显式的子shell外

在Unix环境中,我希望在如下命令链上使用
tee

$ echo 1; echo 2 | tee file
1
2

$ cat file
2
为什么
文件
最终只有来自最终命令的输出


在本次讨论中,假设我不能将它们分开并分别运行命令。

它只有第二个命令的输出,因为分号表示shell的新语句

把它们放在括号里:

(echo 1; echo 2) | tee file
尝试:

如果没有括号,它将被解析为:

 echo 1 ; ( echo 2 | tee file )

除了创建显式的子shell外,还可以使用
{echo 1;echo 2;}| tee file
将输出获取到文件中。请注意,
{
与命令之间必须用空格分隔,并且
}
必须出现在命令可能出现的位置(因此位于第二个分号之后)。另一种选择是始终创建一个包含两个不可分割命令的新脚本,并将该脚本的输出管道化到
tee
联合双进程| tee文件
 echo 1 ; ( echo 2 | tee file )