【问题标题】:exec() error when using find -exec使用 find -exec 时出现 exec() 错误
【发布时间】:2012-07-30 13:34:50
【问题描述】:

我必须使用脚本找到一个名为 Test 的可执行文件,该可执行文件将路径作为参数,然后执行它。我正在用这条线做这个:

find -name Test -exec {} path \;

Test 我得到了一个 execl:

    execl("./Test1","Test1",(char*)0);
    perror("Exec failed");
    exit(EXIT_FAILURE);

其中 Test1Test 位于同一目录中。 “手动”执行 Test 一切正常,但使用上面写的行我有一个 Exec failed: No such file or directory 错误。

怎么了?

【问题讨论】:

  • 只是好奇;为什么要执行路径?
  • 首先,find真的找到文件了吗?
  • 我是这些东西的新手,所以我可能已经做了几个平庸的错误,但是为了回答你:@rsplak:路径是 Test 的参数,正如我从手册页中读到的那样:所有以下要查找的参数都被视为命令的参数,直到参数包含 `;'遇到了。是不是错了?
  • 如果你echo它,你的命令是什么样子的?是否符合预期? (即,将 exec 更改为 -exec echo {} path \;);这将打印命令而不是执行它,因此您可以验证它是您所期望的。
  • 顺便说一句,这听起来很危险。难道您不应该在运行可执行文件之前知道它们的位置吗?这将运行在当前目录树下找到的 所有 个名为 Test 的可执行文件。

标签: c find exec


【解决方案1】:

find 从您正在执行的目录中执行Test find。如果可以改Test的代码,那么把Test1的绝对路径放上去:

execl("/home/myuser/some/path/Test1","Test1",(char*)0);
perror("Exec failed");
exit(EXIT_FAILURE);

或者您可以使用-execdir 代替-exec

find -name Test -execdir {} path \;

从查找手册页:

-execdir:和-exec类似,但是指定的命令是从子目录运行的 包含匹配的文件,通常不是 你开始找到的

【讨论】:

  • 使用 execdir 而不是 exec。你不需要改变任何东西
  • 谢谢,我会尝试两种解决方案(我无法将绝对路径放入代码中,但我可以通过 readlink 弄清楚)编辑:抱歉没有刷新页面,所以我没有看到你的编辑!
猜你喜欢
  • 2012-08-17
  • 1970-01-01
  • 1970-01-01
  • 2017-02-05
  • 2023-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-11
相关资源
最近更新 更多