Embedded Linux: 当 stdout 指向文件或 FIFO 时从日期开始没有输出

Embedded Linux: No output from date when stdout directed to file or FIFO

我正在尝试将日期传递到文件中,例如:

/pwd # date > file.txt

但是每次我检查文件时,里面什么也没有打印出来。我也尝试过其他变体,例如:

/pwd # echo "$(date)" > file.txt

/pwd # echo "$(/bin/date)" > /full/path/file.txt

/pwd # echo "$(/bin/date)" >> /full/path/file.txt(我不希望附加有什么不同,但无论如何都试过了)

我想这可能是某种权限问题,date 无法访问该文件,所以为了好玩,我尝试了:

/pwd # sudo date > /full/path/file.txt

尝试将日期存储到 bash 变量也是徒劳的。但是,果然,date 命令本身继续工作:

Mon Apr 5 14:16:26 UTC 2021

有人知道会发生什么吗?根据我读过的所有其他 post,我正在尝试的东西应该有效。

注意这是一个特殊的(专有)内核 (uname -a):

不过它是基于 Debian 构建的,所以我希望它能正常工作。

编辑: type date:

date is a tracked alias for /bin/date

除了我在 运行 命令时看到的跟踪之外,在命令前加上 set -x 没有任何有趣的事情发生:

strace 看起来有一些很好的信息,但我不会假装知道如何解释它:

编辑 2:

这是一种不寻常的情况 -- 从 strace 结果来看,它看起来像是 libc 错误或 busybox 问题。由于这是一个已有十年历史的软件堆栈,因此您没有在 4.3 中添加的最近引入的日期格式 printf 内置 bash。

最简单的解决方法是根本不使用 busybox date 命令,而是改用脚本语言 -- Python、Perl 等。@jhnc 非常友好地提供了一个用于目的的 perl 命令:

perl -e '$|=1; print scalar localtime, "\n"' > file.txt