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

Bash 无法将控制台输出重定向到文件,bash,Bash,我正在运行sudo dhcpcd eth0.2命令,并在shell中获得输出 但是,我无法将此输出重定向到任何地方 我已尝试使用以下方法重定向标准输出和错误输出: > 我也尝试过使用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

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

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

>
我也尝试过使用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 > 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:~ $
与不带sudo的root运行时相同

root@raspberrypi:~# dhcpcd eth0.2 > tmp
root@raspberrypi:~# cat tmp
root@raspberrypi:~#
我们可以看到,当我重定向标准输出时,输出不再显示在控制台上,而当我重定向错误输出时,它确实显示出来。这意味着它是标准输出。 但为什么没有被任何重定向捕获


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

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

尝试:

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


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

stat tmp的输出是什么?行sudo dhcpcd enp0s25>/tmp/12>&1适合我。我用输出dhcpd正在运行更新了问题!在后台,检查文件时不一定刷新了输出。试试sudo stdbuf-oL-eL dhcpcd eth0.2>>tmp@hek2mgl你应该把它作为这个问题的答案,而不是评论,这样我就可以把它标记为一个成功的答案。我没有注意到,这是dhcp deamon,正如hek2mgl所注意到的,它一直在运行。没错
pi@raspberrypi:~ $ sudo dhcpcd eth0.2 >> tmp
pi@raspberrypi:~ $ cat tmp
pi@raspberrypi:~ $
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:~ $

root@raspberrypi:~# dhcpcd eth0.2 > tmp
root@raspberrypi:~# cat tmp
root@raspberrypi:~#
sudo stdbuf -oL -eL dhcpcd eth0.2 >> tmp