fi sh: глотать флаги из $ argv (контекст: заменить rm на KDE tra sh) - PullRequest
0 голосов
/ 06 апреля 2020

У меня уже есть большая часть работы, но я хочу проглотить флаги, чтобы я не получил ошибку, подобную этой:

/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 на fi sh

Для этого sh я хочу построить функцию, которая проглатывает флаги из $argv

Ответы [ 2 ]

2 голосов
/ 06 апреля 2020

Я бы сделал это

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 мог бы помочь, но это работает, когда вы точно знаете, какие параметры нужно проанализировать.

Обратите внимание, что вы можете все еще быть «уязвимым»: чтобы иметь дело с именами файлов, начинающимися с da sh, вы можете сделать

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

С вашей функцией вам придется использовать 2-е.

0 голосов
/ 06 апреля 2020

Я создал такую ​​функцию:

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

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

, но, может быть, есть менее странный способ сделать это, поэтому мне не нужно использовать эхо?

ааа ... вероятно, нужно лучшее регулярное выражение, чтобы я мог удалять файлы, в которых есть тире lol

...