为什么我不能在Linux中执行某些命令而终端没有任何输出?

时间:2013-07-04 18:31:48

标签: linux command

我试图执行" rmdir *"在终端。因为某些不是当前文件夹下的目录,所以显示某些文件的错误消息不会显示目录。我的目标是在没有任何输出的情况下静默执行命令。

我尝试了以下内容:

rmdir * > /dev/null
rmdir * > file.txt
rmdir * |grep "noexist"  (some non-existing characters)
rmdir * 2>&1 > /dev/null
rmdir * 2>&1 > file.txt
rmdir * 2>&1 |grep "noexist"

只有最后一个命令有效!我感到有点困惑。当最后一个命令有效时,为什么第4和第5个命令不起作用?

3 个答案:

答案 0 :(得分:4)

>重定向STDOUT。 2>重定向STDERR。 &1重定向到STDOUT。 |将STDOUT传输到STDIN以获取新进程。

你有没有尝试过:

rmdir * > /dev/null 2> /dev/null

将STDOUT和STDERR重定向到空设备。

答案 1 :(得分:1)

1) Doesn't redirect stderr using 2>...
2) See 1.
3) See 2.
4) Redirects stderr to stdout, and stdout is redirected to /dev/null, so you still see the redirected stderr on stdout.
5) See 4. The file to which stdout is redirected is just different.
6) This works because you redirected stderr to stdout. stdout is piped in to grep as grep's stdin.

真正有用的是什么:

rmdir * >/dev/null 2>&1

为什么这样做?因为第一个stdout被重定向到/ dev / null。然后stderr被重定向到stdout,它已经被重定向到/ dev / null。

答案 2 :(得分:0)

直到目录为空时才能使用rmdir ..在执行操作之前确保.. ..