当文件路径中有空格时,如何使用“system()”执行bash脚本?
我创建了一个名为“myscript.h”的简单bash脚本.我给它一个.h扩展名,原因我不会在这里透露.这个bash脚本位于“/ var / ftp / something with spaces”中.
从终端,我可以输入“/ var / ftp / something with space / myscript.h”,脚本运行完美. 但是,从我的C程序中,我输入 system("/var/ftp/something with spaces/myscript.h") 并且它抱怨找不到“/ var / ftp / something”.我已使用正斜杠将系统调用更改为以下内容: system("/var/ftp/something with spaces/myscript.h") 但是,它仍然抱怨找不到“/ var / ftp / something”.假设我无法更改目录名称,我该如何解决这个问题呢? 谢谢! 解决方法
要运行单个脚本,您可以避免使用
system(3)库函数(并使用较低级别的系统调用,如
system(3),execve(2),waitpid(2) ……由
system(3)的实现使用),或者您可以在将脚本名称传递给
system(3).
有关详细信息,请参阅Advanced Linux Programming. 在Linux上,记录了system(3)来分叉a / bin / sh -c进程.请参阅sh(1p).并且POSIX shell有一些quoting rules.您可以适当地使用双引号和反斜杠.因此,您将构建(并且可能检查)传递给system(3)的字符串(可能需要谨慎使用asprintf(3)或snprintf(3)).请注意,C编译器还具有(不同的)string literals的引用约定. 一般来说,你应该避免使用code injection(想象一个顽皮的用户给出一些; rm -rf $HOME& ;;输入作为“目录”名称;你不想在奇怪的“/ var / ftp / a上运行system(3) ; rm -rf $HOME& ;; / myscript.h“string” 在您的特定情况下,我建议使用fork(2),execve(2)(可能通过一些仔细选择exec(3)功能),waitpid(2) …适当.这有一点点优点,可以避免依赖和运行/ bin / sh,因此可能稍微快一点(毫秒). 更多地了解Unix shell的作用;例如,阅读bash中的各种shell expansions(它们类似于POSIX sh规定的那些)并注意globbing.参见glob(7) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |