fish:从 $argv 吞下标志(上下文:用 KDE 垃圾替换 rm)

fish: swallow flags from $argv (context: replace rm with KDE trash)

我已经完成了大部分工作,但我想吞下标志,这样我就不会收到这样的错误:

/t/temp-5969 $ trash -rf fish-functions/
kioclient: Unknown option 'rf'.
kioclient: Use --help to get a list of available command line options.

到目前为止我有这个:

/t/temp-5969 $ type trash
trash is a function with definition
function trash
    kioclient move $argv trash:/
end

(替换 rm:abbr rm trash

我希望它忽略 -rf,这样它仍然可以正常工作,这样当我在 bash 和 fish

之间切换时,我的肌肉记忆不会混乱

为此,我想构建一个函数来吞下 $argv

中的标志

我创建了一个这样的函数:

function swallowFlags
    sed 's/-\w\+//'
end

function trash
    kioclient move (echo $argv | swallowFlags) trash:/
end

但也许有一种不那么奇怪的方法可以做到这一点,所以我不必使用 echo?

啊..我可能需要一个更好的正则表达式,这样我就可以删除其中有破折号的文件哈哈

我会这样做

function trash
    while test (count $argv) -gt 0
        switch $argv[1]
            case --
                set argv $argv[2..-1]
                break
            case '-*'
                set argv $argv[2..-1]
            case '*'
                break
        end
    end

    kioclient move $argv trash:/
end

如果 argparse 可以提供帮助,那就太好了,但是当您明确知道需要解析哪些选项时,这会起作用。

请注意,您可能仍然是 "vulnerable":要处理以破折号开头的文件名,您可以这样做

rm -- -filename-starts-with-a-dash
rm ./-filename-starts-with-a-dash

使用你的函数,你将不得不使用第二个。