创建自定义鱼类开关

时间:2016-12-26 22:33:21

标签: bash function shell fish

我正在开发名为quick(see here)的鱼壳函数,我想添加一些开关。

例如quick -l列出所有pathLabels。

Fish documentation似乎没有提供此类信息。

我的问题是,

  • 增强功能的最佳方法是什么?鱼的开关功能?
  • 是否可以使用新交换机扩展现有命令?
  • 这是否与bash / shell的类似主题有关?

我在那里遇到过几个相关的信息,如" How do I parse command line arguments in bash?"但是还没有找到针对这些问题的明确的鱼类特定答案。如有任何帮助,我们将不胜感激!

注意:以> functions alias为例,似乎在switch语句中只使用了$ argv。

1 个答案:

答案 0 :(得分:1)

您可以使用getopt。它非常冗长。以下是仅查找-h--help

的示例
function foobar
    set -l usage "usage: foobar [-h|--help] subcommand [args...]
                ... more help text ...
"
    if test (count $argv) -eq 0
        echo $usage
        return 2
    end

    # option handling, let's use getopt(1), and assume "new" getopt (-T)
    set -l tmp (getopt -o h --long help -- $argv)
    or begin
        echo $usage
        return 2
    end

    set -l opts
    eval set opts $tmp

    for opt in $opts
        switch $opt
            case -h --help
                echo $usage
                return 0
            case --
                break
            case '-*'
                echo "unknown option: $opt"
                echo $usage
                return 1
        end
    end

    switch $argv[1]
        case subcommand_a
            ... etc