【发布时间】:2018-02-01 05:21:01
【问题描述】:
我目前正在编写一个脚本,它将在 PATH 中搜索特定程序名称,然后输出该程序的所有路径(可能有多个可执行文件)。
我想出的是find $path -name programName。给定测试输入,虽然它确实生成了正确的输出,但它还为路径中没有程序的目录输出No such file or directory 行。有什么办法可以去掉吗?
谢谢!
编辑:此脚本旨在模仿“which -a”命令,如果有帮助的话
【问题讨论】:
我目前正在编写一个脚本,它将在 PATH 中搜索特定程序名称,然后输出该程序的所有路径(可能有多个可执行文件)。
我想出的是find $path -name programName。给定测试输入,虽然它确实生成了正确的输出,但它还为路径中没有程序的目录输出No such file or directory 行。有什么办法可以去掉吗?
谢谢!
编辑:此脚本旨在模仿“which -a”命令,如果有帮助的话
【问题讨论】:
由于您正在寻找程序,我建议您使用以下命令:
find "$path" -type f -name programName 2>/dev/null
2>/dev/null 将您的stderr 静音
(更多信息:http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html)。
强制find 仅返回文件,因为您可能有一个名为programName 的文件夹,使用当前命令,find 命令将获取该文件夹。
此外,如果不可用,您可以添加-executable 选项:-perm /u+x 添加您正在查找文件的约束并且这些文件应该是可执行的。
find "$path" -type f -name programName -executable 2>/dev/null
【讨论】:
-executable 部分很不错。 ++
file 命令等添加更多约束 ;-)
试试:
find "$path" -name programName -type f 2>/dev/null
【讨论】:
$path 更改为"$path"。
-type f 进行过滤。