更新 apm run 自动补全

This commit is contained in:
2025-10-22 00:31:28 +08:00
parent a0036848c8
commit 2dd393b80b

View File

@@ -43,7 +43,7 @@ _apm()
"install" "remove" "purge" "autoremove" "autopurge" "install" "remove" "purge" "autoremove" "autopurge"
"update" "update"
"upgrade" "full-upgrade" "dist-upgrade" "upgrade" "full-upgrade" "dist-upgrade"
"edit-sources" "run"
"help" "help"
"source" "build-dep" "source" "build-dep"
"clean" "autoclean" "clean" "autoclean"
@@ -164,7 +164,48 @@ _apm()
;; ;;
esac esac
fi fi
# 定义目录路径
primary_dir="/var/lib/apm/apm/files/ace-env/var/lib/apm/"
fallback_dir="/var/lib/apm/"
# 查找不包含特定子目录的目录
find_directories_without_ace_env() {
local base_dir="$1"
local result=()
# 检查基础目录是否存在
if [[ ! -d "$base_dir" ]]; then
return 1
fi
# 查找所有直接子目录排除包含ace-env子目录的目录
while IFS= read -r -d '' dir; do
if [[ -d "$dir" ]] && [[ ! -d "$dir/files/ace-env" ]]; then
result+=("$(basename $dir)")
fi
done < <(find "$base_dir" -maxdepth 1 -type d ! -path "$base_dir" -print0 2>/dev/null)
# 输出结果
if [[ ${#result[@]} -gt 0 ]]; then
printf '%s\n' "${result[@]}"
return 0
fi
return 1
}
function apm_run_compgen(){
result=$(find_directories_without_ace_env "$primary_dir")
if [[ -n "$result" ]]; then
echo "$result"
else
result=$(find_directories_without_ace_env "$fallback_dir")
if [[ -n "$result" ]]; then
echo "$result"
else
echo ""
fi
fi
}
# specific command arguments # specific command arguments
if [[ -n $command ]]; then if [[ -n $command ]]; then
case $command in case $command in
@@ -195,9 +236,8 @@ _apm()
command grep "^Source: $cur" | sort -u | cut -f2 -d" " ) ) command grep "^Source: $cur" | sort -u | cut -f2 -d" " ) )
return 0 return 0
;; ;;
moo) run)
COMPREPLY=( $( compgen -W 'moo' \ COMPREPLY=( $( compgen -W "$(apm_run_compgen)" "$cur" ) )
-- "$cur" ) )
return 0 return 0
;; ;;
esac esac