有时,过程替换不会按预期工作。下面是一个例子:
输入:
gcc <(echo 'int main(){return 0;}')
Run Code Online (Sandbox Code Playgroud)
输出:
/dev/fd/63: file not recognized: Illegal seek
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
输入:
但是当与不同的命令一起使用时,它会按预期工作:
grep main <(echo 'int main(){return 0;}')
Run Code Online (Sandbox Code Playgroud)
输出:
int main(){return 0;}
Run Code Online (Sandbox Code Playgroud)
我注意到与其他命令类似的失败(即期望来自进程替换的文件的命令不能使用/dev/fd/63或类似)。这次失败gcc只是最近的一次。是否有一些我应该注意的一般规则来确定进程替换何时会以这种方式失败并且不应该使用?
我在 Ubuntu 12.04 上使用这个 BASH 版本(我也在 arch 和 debian 中看到过这个):
GNU bash,版本 4.3.11(1)-release (i686-pc-linux-gnu)
我想自动化一个 Linux 构建,但最终我需要运行一个看起来非常手动的步骤:make menuconfig. 这似乎在操作系统和内核配置之间同步配置?
cp git-tracked-config .config
make defconfig
make menuconfig # <- how to automate/script this?
make V=s
Run Code Online (Sandbox Code Playgroud)
基本上,如何删除对make menuconfig构建脚本的调用?
顺便说一句,这是对构建错误的反应,该错误似乎在我从未调用 make menuconfig 的情况下运行时发生:
make[1]: *** No rule to make target `include/config/auto.conf', needed by `include/config/kernel.release'. Stop.
Run Code Online (Sandbox Code Playgroud)
似乎在 makefile 中缺少规则,可能是因为 makefile 本身不存在,或者 makefile 尚未生成/变形以包含该规则,但这是一个单独的问题。
可能有一种更聪明的方法来解决这个问题。是否还有其他我没有跟踪但应该跟踪的配置(例如 oldconfig)?