sh : 1 file not found error with system() command? 的原因在 StackOverflow 中尝试了可能的解决方案(如下所列)但失败

标签 c bash sh

根据StackOverflow中的答案,我在C程序中使用系统命令通过以下可能的方式调用matrix.sh:

1) 系统("./matrix.sh")

2) int ret=system("./matrix.sh")

3) 系统("cd/path/to/matrix.sh; ./matrix.sh &")

4) 系统("./matrix.sh>> 输出文件名")

5)系统(“路径/to/matrisx.sh”)

6) 系统("bash/Path/to/matrix.sh")

还有其他一些。但所有这些都会给出相同的错误。 sh:1:Matrix.sh 未找到,另一个错误(第二种情况除外)为 警告:忽略使用属性 warn_unused_result [-Wunused-result] 声明的“system”的返回值

调用C程序和[输入.sh脚本,预期输出文件]的路径不同。在这种情况下如何编写system()命令?出现这个错误的原因是什么?

最佳答案

假设您要执行的脚本的绝对路径名是 /path/to/matrix.sh,并且可以通过命令行按名称执行,则可以使用的变体是

system("/path/to/matrix.sh");

为了避免第二次警告,您还应该捕获返回值,并验证它是否未指示错误(通过为 -1)。

至于你的尝试:

1) system("./matrix.sh")

这取决于当前工作目录中是否存在matrix.sh(该目录可能是也可能不是包含 C 程序的目录)。这就是“./”部分的含义。

2) int ret=system("./matrix.sh")

与之前相同,只是在这里捕获错误代码。 shell 可能会发出错误消息,但程序无法观察到这一点。程序可以使用 ret 的值来确定脚本是否已成功启动,如果成功,其退出代码是什么。

3) system("cd /path/to/matrix.sh; ./matrix.sh &")

“cd/path/to/matrix.sh”部分是错误的,因为 matrix.sh 不是目录。此外,还不清楚为什么使用 & 运算符在后台执行脚本。然而,这种变化应该有效:

system("cd /path/to && ./matrix.sh");

如果脚本(不明智地)依赖于使用相对路径来定位安装在其附近的其他文件,那么这样做可能是有意义的,并且如果没有成功更改脚本,则在不尝试执行(可能是错误的)脚本的情况下,它将失败工作目录。

4) system("./matrix.sh>> outputfilename")

这与 (1) 和 (2) 具有相同的问题。重定向标准输出并不能解决这个问题。您可以通过重定向标准错误而不是标准输出(“./matrix.sh 2>/dev/null”)来抑制错误消息,但这本身并不能解决主要问题。

5) system("Path/to/matrisx.sh")

差不多就是这样了,但是 (1) 文件和目录名对于 bash 是区分大小写的,并且 Pathpath 不一样>,但更重要的是,(2) 如果没有前导 / 字符,“Path/to/matrisx.sh”仍然相对于当前工作目录进行解释。

6) system("bash/Path/to/matrix.sh")

如果路径正确的话,这几乎也可以工作,但是在“bash”和脚本路径之间至少需要一个空格字符。

system("bash /path/to/matrix.sh");

这种变体确实引入了额外的 shell 级别,但是,除非您命名的脚本不能直接执行,否则这是不必要的低效率。

关于sh : 1 file not found error with system() command? 的原因在 StackOverflow 中尝试了可能的解决方案(如下所列)但失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55149692/

相关文章:

c - Windows 进程注入(inject)崩溃

只调用一个函数并让其他函数访问它的返回值?

linux - 如何在 bash 中读取字符串或将整数转换为字符串?

linux - 将 Windows 批处理文件移植到 shell 脚本。如果可能的话并行执行任务

c - 能被 3 整除的数的算术平均值

bash - 多个变量的列总和

python - 在 Windows 中使用 Bash 模块运行 Python 脚本

Xcode 4 : custom behavior does not execute my sh script?

linux - cronjob 不执行独立运行的脚本

C 将其他 C 程序作为主 argv 传递