gpt4 book ai didi

ubuntu - gnumake 的奇怪重定向问题

转载 作者:行者123 更新时间:2023-12-04 18:28:39 26 4
gpt4 key购买 nike

我有一个系统,我在其中生成了一个 makefile,它在 Mac OS X 下完美运行。当我在 Linux 下运行它时,我遇到了一个奇怪的问题。我设法将我的 makefile 简化为一个非常简单的示例:

编译:
gcc -o prog *.c &> 编译__

chm:
chmod u=rwx,g=rwx,o= prog

两者0:
gcc -o prog *.c &> compile__ ;\
chmod u=rwx,g=rwx,o= prog

两者1:
gcc -o 编 *.c ;\
chmod u=rwx,g=rwx,o= prog

这个想法是编译一个文件,然后更改它的权限。如果我执行命令序列:

编译
制作 chm

一切正常。但是,如果我执行:

做两个0

我收到消息:

chmod:无法访问“prog”:没有这样的文件或目录

并且权限没有改变。另一方面,如果我执行:

做两个1

权限已正确更改。唯一的区别是both0下的重定向“&> compile__”,我为both1删除了它。

有任何想法吗?

最佳答案

&> compile__

不是可移植重定向。在 bash 中,它重定向标准错误和标准输出,我认为这是您的意图。其他 shell 可能会用它做不同的事情。特别是,破折号使命令( &)成为背景,并重定向标准输出( > compile__)。 chmod在编译完成之前执行并创建 prog .使用 cc -o prog *.c > compile__ 2>&1 可移植地重定向标准错误和标准输出。 .

(为什么它可以在 mac 上工作?可能是一个不同的 shell 解释 &> 不同,可能是编译器更早地打开了文件,可能是一个竞争条件略有不同。)

关于ubuntu - gnumake 的奇怪重定向问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5664886/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com