我正在尝试查找可能位于$LD_LIBRARY_PATH
. 基本上我想:
find $LD_LIBRARY_PATH -name "*libdl*"
Run Code Online (Sandbox Code Playgroud)
但是,由于变量中有多个条目并且将我的 a 分开,上述命令失败:
。我收到错误:
No such file or directory
Run Code Online (Sandbox Code Playgroud)
如何做到这一点?
您可以使用带冒号的分词,因为 *PATH 变量是以冒号分隔的目录列表。
取消注释以下行以保存和恢复旧的 IFS(推荐):
#oldIFS="$IFS"
IFS=:
set -o noglob # disable the glob part of the split+glob operator
# unlikely to be needed as library directories
# are unlikely to have wildcard characters in their
# name.
find -H $LD_LIBRARY_PATH -mindpeth 1 -maxdepth 1 -name "*libdl*"
#IFS="$oldIFS"
#set +o noglob
Run Code Online (Sandbox Code Playgroud)
-H
如果这些$LD_LIBRARY_PATH
组件中的任何一个是符号链接,则需要。-mindepth 1
(一个 GNU 扩展,尽管现在在许多其他实现中都可以找到)以避免在这些组件本身上进行匹配,-maxdepth
跳过在子目录中的搜索(不打算由动态链接器搜索)。
Bash 速记假定默认值$IFS
并且如果已知目录不包含该默认值的任何字符$IFS
(空格,制表符和换行符)或通配符,并且这些目录都不是符号链接也没有子目录,并且名称这些目录本身与模式不匹配:
find -H ${LD_LIBRARY_PATH//:/ } -name "*libdl*"
Run Code Online (Sandbox Code Playgroud)
它使用替换命令将每个冒号转换为空格(从 ksh93 复制的功能)。
使用zsh
,而无需做出任何这些假设:
print -rC1 - ${(s[:])^LD_LIBRARY_PATH}/*libdl*(ND)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
210 次 |
最近记录: |