C fopen不是';当我用bash运行程序时,它不工作

C fopen不是';当我用bash运行程序时,它不工作,c,bash,shell,fopen,C,Bash,Shell,Fopen,我有简单的bash脚本 #!/bin/bash make ./code1_test/test_syn1 ./code2_test/test_syn2 ./code3_test/test_syn3 test_syn是我的程序测试。在所有这些程序中,我都使用fopen命令打开.txt文件。如果我从命令行运行程序,我有一个正确的测试输出,但是当我使用这个bash脚本时,fopen返回NULL,因此我无法打开.txt文件,也无法运行测试。为什么会发生这种情况,我如何修复这种情况?如果您使用的是带有相

我有简单的bash脚本

#!/bin/bash

make
./code1_test/test_syn1
./code2_test/test_syn2
./code3_test/test_syn3

test_syn是我的程序测试。在所有这些程序中,我都使用fopen命令打开.txt文件。如果我从命令行运行程序,我有一个正确的测试输出,但是当我使用这个bash脚本时,fopen返回NULL,因此我无法打开.txt文件,也无法运行测试。为什么会发生这种情况,我如何修复这种情况?

如果您使用的是带有相对路径的
fopen()
,则应该从其目录执行脚本。试试这个:

#!/bin/bash
make
(cd code1_test/ && exec ./test_syn1)
(cd code2_test/ && exec ./test_syn2)
(cd code3_test/ && exec ./test_syn3)
否则,您的程序会尝试在运行Bash脚本的目录中打开
.txt
,这不是您想要的


如果希望能够从任何地方运行程序,则在使用
fopen()

时可以尝试不使用相对路径。如果使用相对路径的
fopen()
,则应从其目录执行脚本。试试这个:

#!/bin/bash
make
(cd code1_test/ && exec ./test_syn1)
(cd code2_test/ && exec ./test_syn2)
(cd code3_test/ && exec ./test_syn3)
否则,您的程序会尝试在运行Bash脚本的目录中打开
.txt
,这不是您想要的


如果您希望能够从任何地方运行程序,您可以在
fopen()

创建一个最小的测试同步文件来复制它时尝试不使用相对路径。这可能是路径问题。也可以发布test_syn的代码。很可能你在程序中使用的是相对路径,因此当你运行脚本时,程序会在脚本运行的目录中查找。每当我看到类似“of不起作用”的问题时,我可以保证两件事:海报是初学者,并且工作正常。进行一些基本的调试:打印出调用的return和errno值,尝试查找正在打开的文件的完整路径名,等等。这几乎肯定是当前目录/路径的问题。您能否创建一个最小的test_syn文件来复制此文件?这可能是路径问题。也可以发布test_syn的代码。很可能你在程序中使用的是相对路径,因此当你运行脚本时,程序会在脚本运行的目录中查找。每当我看到类似“of不起作用”的问题时,我可以保证两件事:海报是初学者,并且工作正常。进行一些基本的调试:打印出调用的return和errno值,尝试查找要打开的文件的完整路径名,等等。这几乎肯定是当前目录/路径的问题。