【发布时间】:2015-01-02 09:09:46
【问题描述】:
当我使用execlp("ls", "ls", "-al", NULL) 时,我的程序可以工作,但当我使用execlp("{", "{", "ls", "-al", "}", NULL) 时,它就无法工作
有没有办法在execlp() 中使用大括号?
【问题讨论】:
标签: c exec parentheses
当我使用execlp("ls", "ls", "-al", NULL) 时,我的程序可以工作,但当我使用execlp("{", "{", "ls", "-al", "}", NULL) 时,它就无法工作
有没有办法在execlp() 中使用大括号?
【问题讨论】:
标签: c exec parentheses
基本上,答案是否定的。
execlp("{", "{", "ls", "-al", "}", NULL)
您正在尝试执行名为 { 的命令。 { 不是命令;它是 shell 语法的一部分,execlp(不像system)不通过 shell 执行它的命令。命令名称必须是实际可执行文件(二进制或 shell 脚本)。
如果你真的想这样做,你可以调用/bin/sh 作为命令,并传递命令行参数,然后它将执行。例如(我没有测试过这个):
execlp("/bin/sh", "/bin/sh", "-c", "{ ls -al; }", NULL);
请注意,整个命令是一个字符串,/bin/sh 将一个参数视为-c 选项的一个参数。 (shell 本身会将其拆分为单词。)
【讨论】:
execlp("[", "[", "ls", "-gt", ".", "]", NULL); 可能会工作,甚至可能成功(但不会产生任何输出)。但那是因为通常有一个二进制 /bin/[ 或 /usr/bin/[ 供 execlp() 执行。
[ 是一个命令,几乎等同于test。与{ 不同,它不是内置的shell 语法。 info bash 或 info test 了解更多信息。