From 4e83c9bef3abf6760d3551e9b448e96e5651fe1e Mon Sep 17 00:00:00 2001 From: FlintyLemming Date: Fri, 19 Dec 2025 16:01:58 +0800 Subject: [PATCH] add fish config --- fish/add-on.fish | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/fish/add-on.fish b/fish/add-on.fish index cc59e13..f2868ac 100644 --- a/fish/add-on.fish +++ b/fish/add-on.fish @@ -80,15 +80,28 @@ end ## 让 sudo 能够识别自定义 bin 下的脚本 function sudo --description "Replacement for sudo that preserves custom PATH commands" - # 获取命令的完整路径(比如输入 zp,它会返回 /home/user/.flinty/bin/zp) - set -l command_path (type -p $argv[1]) + # 1. 如果没有任何参数,直接运行原始 sudo (通常显示帮助) + if not set -q argv[1] + command sudo + return + end + + # 2. 如果第一个参数是以 "-" 开头的选项 (比如 -i, -s, -u, -E) + # 我们直接把所有参数原样传给真正的 sudo,不做路径解析 + if string match -q "-*" -- $argv[1] + command sudo $argv + return + end + + # 3. 如果第一个参数是普通的命令名 (比如 zp, apt, vim) + # 使用 type -p 获取其完整路径。使用 -- 防止命令名本身带杠导致 type 报错 + set -l command_path (type -p -- $argv[1] 2>/dev/null) if test -n "$command_path" - # 如果找到了完整路径,就用完整路径调用真正的 sudo - # $argv[2..-1] 表示把剩下的参数原样传递 + # 找到了完整路径,调用真正的 sudo 运行该绝对路径 command sudo $command_path $argv[2..-1] else - # 如果找不到(比如 sudo apt),就按原样执行 + # 没找到路径(可能是内建命令或拼写错误),直接交给真正的 sudo 处理 command sudo $argv end end