开发者问题收集

Bash:查找并执行文件

2020-06-18
801

在 bash shell 脚本中,我尝试

  • 在当前目录中的未知位置查找可执行文件(保证存在)
  • 运行该可执行文件,传入一组文件作为参数。

假设:

  • 可执行文件可能位于给定系统的不同子目录中(无法控制)
  • 可执行文件不会位于 $PATH

目前,我可以使用以下方法找到可执行文件:

#!/bin/bash
    EXECUTABLE=$(find . -name 'executable_name*' -type f)

(由于平台相关原因,使用后缀通配符)

尝试执行失败,返回:

No such file or directory ./path/to/executable_name

*注意:如果我提供 find 返回的确切路径,可执行文件确实有效明确地

尝试以下两个选项均会失败并出现相同的错误:

据我所知,将 -exec {find 结合使用会将 find 结果作为参数传递给可执行文件,这与我想要实现的目标相反。

预先在目标文件上设置执行权限也会产生相同的结果

2个回答

尝试

find . -name 'executable_name*' -type f | bash
Digvijay S
2020-06-18

可能可执行文件位于包含空格的路径中。在这种情况下,您必须用引号括住变量。

例如:

$ cat with\ spaces/test.sh 
#! /usr/bin/bash
echo test
$ foo=$(find with\ spaces/ -type f -name '*.sh')
$ echo $foo
with spaces/test.sh
$ $foo
bash: with: command not found...
$ "$foo"
test

另一种可能性是,您在脚本中 cd 到执行 find (并将其输出存储在变量中)和调用可执行文件之间的某个目录。

tectux
2020-06-18