该实用程序which会在路径上找到一个程序,但是任意数据文件呢?
我一定是在寻找错误的东西,但我找不到任何使用标准实用程序来做到这一点的方法,所以我想写一个小 Bash 脚本来做到这一点。
该$PATH环境变量由冒号分隔,但试图设置IFS=':',然后遍历结果是不是为我工作。这是我到目前为止所得到的:
IFS=':' DIRS=($PATH)
for d in $DIRS; do echo $d; done
Run Code Online (Sandbox Code Playgroud)
此时它只输出我路径中的第一个条目,而不是所有条目。
想法?如果已经有执行此操作的标准命令,则没有理由编写脚本......
使用这个,使用 bash参数扩展和find:
find ${PATH//:/\/ } -name 'file'
Run Code Online (Sandbox Code Playgroud)
错误不在于赋值,而在于不循环数组。
IFS=: dirs=($PATH)
for dir in "${dirs[@]}"; do
echo "$dir"
done
Run Code Online (Sandbox Code Playgroud)
为我工作;或者更简洁地说
printf '%s\n' "${dirs[@]}"
Run Code Online (Sandbox Code Playgroud)
就像您发现的那样,仅$dirs返回数组中的第一项。
要实际遍历这些目录寻找特定文件,也许可以尝试
desired_file_name=$1 # or whatever
for dir in "${dirs[@]}"; do
test -e "$dir/$desired_file_name" || continue
echo "$0: found $dir/$desired_file_name" >&2
done
Run Code Online (Sandbox Code Playgroud)
另一种方法是
find "${dirs[@]}" -name "$desired_file_name"
Run Code Online (Sandbox Code Playgroud)
(你的私有变量应该更喜欢小写,所以我改为DIRS。dirs少喊叫对眼睛也有好处。)
| 归档时间: |
|
| 查看次数: |
2240 次 |
| 最近记录: |