Bash自定义目录遍历函数调用报错:提示命令未找到求解决
修复bash目录遍历函数myfind的问题
你的代码里存在几个语法和逻辑错误,导致出现"command not found"报错和无响应的问题,以下是具体问题和修正方案:
错误点说明
- 变量被当作命令执行:代码中
$(directory)的写法是尝试执行名为directory的系统命令,但directory是你定义的局部变量,正确的引用方式是$directory。这是导致"command not found"的核心原因。 basename命令未正确执行:原代码里的echo "(basename "${file}")"只是输出字符串,并没有真正调用basename命令提取文件名,需要用$()包裹命令来获取执行结果。- 未处理空目录场景:当目标目录为空时,
"$directory"/*会被当作一个字面量字符串,导致循环处理不存在的路径,需要添加判断跳过这种情况。
修正后的完整代码
#!/bin/bash function myfind(){ local directory=$1 # 输出当前遍历的目录路径 echo "$directory" # 遍历目录下的所有文件/子目录 for file in "$directory"/*; do # 跳过空目录时的无效路径 [[ -e "$file" ]] || continue if [[ -d "${file}" ]]; then # 递归遍历子目录 myfind "$file" else # 输出文件名(不含路径) echo "$(basename "${file}")" fi done } # 支持直接执行脚本并传入目录参数 if [[ $# -ge 1 ]]; then myfind "$1" fi
使用方法
- 给脚本添加可执行权限:
chmod +x your-script-name.sh(替换为你的脚本文件名) - 方式一:加载函数到当前shell后调用
source ./your-script-name.sh myfind /path/to/target-directory - 方式二:直接执行脚本并传入目标目录
./your-script-name.sh /path/to/target-directory
内容的提问来源于stack exchange,提问作者LRJuarez
相关产品推荐
相关产品推荐

