鱼:$ argv中的吞咽标志(上下文:用KDE垃圾替换rm)

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

/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和鱼之间切换时,我的肌肉记忆就不会混乱

要完成此操作,我想构建一个函数来吞没$argv中的标志

wuyancindy 回答:鱼:$ argv中的吞咽标志(上下文:用KDE垃圾替换rm)

我会这样做

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可以提供帮助,那就很好了,但是当您明确知道需要解析哪些选项时,这种方法就可以工作。

请注意,您可能仍然很“脆弱”:要处理以短划线开头的文件名,您可以这样做

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

使用您的功能,您将不得不使用第二个。

,

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

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

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

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

啊。我可能需要一个更好的正则表达式,以便删除带有破折号的文件大声笑

本文链接:https://www.f2er.com/2503187.html

大家都在问