当我在Cygwin中使用管道连接命令时,为什么不';t《命令法》”;“独立”吗;?

当我在Cygwin中使用管道连接命令时,为什么不';t《命令法》”;“独立”吗;?,cygwin,pipe,Cygwin,Pipe,我是Cygwin的初学者。如果我有: cat output.txt | rm output.txt 我想在删除文件之前打印出结果,但即使这些命令单独输入到Cygwin中时可以找到,结果也不会打印。同样地: grep -c 'ps' count.tmp | rm count.tmp 我想在删除count.tmp文件之前显示grep-c'ps'count.tmp的结果。不要用管道传输它们 改为这样做: cat output.txt ; rm output.txt grep -c 'ps' cou

我是Cygwin的初学者。如果我有:

cat output.txt | rm output.txt
我想在删除文件之前打印出结果,但即使这些命令单独输入到Cygwin中时可以找到,结果也不会打印。同样地:

grep -c 'ps' count.tmp | rm count.tmp
我想在删除
count.tmp
文件之前显示
grep-c'ps'count.tmp的结果。

不要用管道传输它们

改为这样做:

cat output.txt ; rm output.txt
grep -c 'ps' count.tmp ; rm count.tmp
编辑:管道(
|
)获取一个命令的标准输出,并将其运行到另一个命令的标准输入中。。。像这样:

# Get the number of lines
cat output.txt | wc -l 

or 

echo "Hello there" | tr -d' '
要连接命令,请使用
&&

将逐个运行命令

echo Hi ; false; echo there
只有在前一个命令以零状态代码(成功)退出时,
&&
才会运行下一个命令

管道命令,因此不能保证不会首先运行
rm
命令。使用

cat output.txt && rm output.txt

只有当
cat
命令成功时,它才会删除文件。

这对于来自Windows/DOS背景的人来说是一个重要的区别,在Windows/DOS背景下,管道命令确实按顺序运行,在临时文件中传递stdio。
cat output.txt && rm output.txt