我有
BusyBox v1.27.1 (2017-08-03 03:14:35 CEST) built-in shell (ash)
在路由器上。我发现一个奇怪的问题:
root@DD-WRT:/# echo -n "Hi" 2>/dev/null
-sh: 2: Invalid argument
似乎我无法重定向 stderr。这是众所周知的事情吗?还是一个错误?除了重定向 stderr 之外还有其他选择吗?
答案1
这是 DD-WRT 的 bug,已于 2019 年 8 月修复。
F_DUPFD_CLOEXEC
自 2008 年 Linux 2.6.24 起,该函数的参数就可fcntl()
用了。- 十年后的 2018 年,Busybox 的 Almquist shell 开始使用它,用于制定 shell 重定向的部分内容。
- 但某些路由器上的 DD-WRT 中提供的 Linux 2.6 是 Linux 2.6。23。
解决方案是将对F_DUPFD_CLOEXEC
DD-WRT 的 Linux 2.6 的支持向后移植。
进一步阅读
- 医生 (2017-03-26)。Busybox - 自 r31533 Broadcom K2.6 以来参数无效。 DD-WRT 错误#5784。
- 丹尼斯·弗拉森科 (2018-03-30)。 灰烬:使用
F_DUPFD_CLOEXEC
和O_CLOEXEC
。忙碌的盒子 git.