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
返回的确切路径,可执行文件确实有效明确地
尝试以下两个选项均会失败并出现相同的错误:
-
$EXECUTABLE {...}"
相关问题
据我所知,将
-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