无法将控制台输出重定向到文件

时间:2019-04-17 09:07:21

标签: bash

我正在运行命令“ sudo dhcpcd eth0.2”并在外壳中获取输出 但是,我无法将此输出重定向到任何地方。

我尝试使用以下方法重定向标准输出和错误输出:

>
>>
|
2>
> file 2>&1
| tee file

我也尝试过使用root代替sudo。

这是我要重定向的输出

pi@raspberrypi:~ $ sudo dhcpcd eth0.2
DUID 00:01:00:01:23:4f:5f:0a:b8:27:eb:64:90:ac
eth0.2: IAID eb:31:c5:f9
eth0.2: soliciting a DHCP lease
eth0.2: soliciting an IPv6 router
eth0.2: using IPv4LL address 169.254.149.253
eth0.2: adding route to 169.254.0.0/16
forked to background, child pid 1883
pi@raspberrypi:~ $

尝试将标准输出发送到文件

pi@raspberrypi:~ $ sudo dhcpcd eth0.2 > tmp
pi@raspberrypi:~ $ cat tmp
pi@raspberrypi:~ $

尝试将错误输出发送到文件

pi@raspberrypi:~ $ sudo dhcpcd eth0.2 2> tmp
DUID 00:01:00:01:23:4f:5f:0a:b8:27:eb:64:90:ac
eth0.2: IAID eb:31:c5:f9
eth0.2: soliciting a DHCP lease
eth0.2: soliciting an IPv6 router
eth0.2: using IPv4LL address 169.254.149.253
eth0.2: adding route to 169.254.0.0/16
forked to background, child pid 1948
pi@raspberrypi:~ $ cat tmp
pi@raspberrypi:~ $

试图通过管道来发球

pi@raspberrypi:~ $ sudo dhcpcd eth0.2 |tee tmp
pi@raspberrypi:~ $ cat tmp
pi@raspberrypi:~ $

尝试>>

pi@raspberrypi:~ $ sudo dhcpcd eth0.2 >> tmp
pi@raspberrypi:~ $ cat tmp
pi@raspberrypi:~ $

尝试grep

pi@raspberrypi:~ $ sudo dhcpcd eth0.2 |egrep .
pi@raspberrypi:~ $
pi@raspberrypi:~ $ stat tmp
  File: tmp
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: b307h/45831d    Inode: 1184        Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/      pi)   Gid: ( 1000/      pi)
Access: 2019-04-17 10:55:44.351058825 +0200
Modify: 2019-04-17 11:13:29.936779857 +0200
Change: 2019-04-17 11:13:29.936779857 +0200
 Birth: -
pi@raspberrypi:~ $ sudo dhcpcd eth0.2 > tmp 2>&1
pi@raspberrypi:~ $ stat tmp
  File: tmp
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: b307h/45831d    Inode: 1184        Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/      pi)   Gid: ( 1000/      pi)
Access: 2019-04-17 10:55:44.351058825 +0200
Modify: 2019-04-17 11:15:26.295156264 +0200
Change: 2019-04-17 11:15:26.295156264 +0200
 Birth: -
pi@raspberrypi:~ $

与没有sudo的root用户运行时相同

root@raspberrypi:~# dhcpcd eth0.2 > tmp
root@raspberrypi:~# cat tmp
root@raspberrypi:~#

我们看到的是,当我重定向标准输出时,不再在控制台上显示该输出,而当我重定向错误输出时,该显示了。那应该意味着它是标准输出。 但是为什么没有被任何重定向捕获?

预期结果是我应该能够将控制台上显示的文本发送到文件或其他进程。

1 个答案:

答案 0 :(得分:1)

dhcpd在后台运行(!),在检查文件时不一定刷新了输出。

尝试:

sudo stdbuf -oL -eL dhcpcd eth0.2 >> tmp

当进程正在执行输出操作(例如printf())时,底层的libc将缓冲输出。根据输出是否到达终端,缓冲算法将是行缓冲(tty)还是块缓冲(非tty)。

块缓冲的缓冲区大小取决于您的系统。在您的示例中,输出小于缓冲区大小,因此当您查看文件时该文件仍然为空。