1

我试图在终端中执行“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 个命令不起作用?

4

3 回答 3

4

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

你试过了吗:

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

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

于 2013-07-04T18:35:39.463 回答
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

为什么这行得通?因为第一个标准输出被重定向到 /dev/null。然后stderr被重定向到stdout,而stdout已经被重定向到/dev/null。

于 2013-07-04T18:41:54.257 回答
0

在目录为空之前,您不能使用 rmdir.. 确保.. 在执行操作之前..

于 2013-08-14T01:28:35.667 回答