Могу ли я расширить команду, добавив собственные псевдонимы?

Самый простой способ — загрузить уже скомпилированный ffmpegдвоичный файл. Регулярно обновляемые статические сборки для Linux доступны по адресу :

.

https://www.johnvansickle.com/ffmpeg/

Просто загрузите, распакуйте и выполните. При желании переместите его куда-нибудь в свой PATH, например /usr/local/binили ~/bin.

2
21.11.2019, 10:04
1 ответ

Отказ от ответственности :Я ничего не знаю о Node.js или npm.

Использовать функцию оболочки, которая переопределяет команду npm:

npm () {
    if [ "$1" = scripts ]; then
        jq '.scripts' package.json
    else
        command npm "$@"
    fi
}

Эта функция оболочки определяет, является ли первый аргумент функции строкой scriptsили нет. Если это так, он запускает вашу команду jq. Если это не так, вызывается настоящая команда npmс исходными аргументами командной строки.

Утилита commandгарантирует, что функция не вызовет (бесконечную рекурсию, иначе ).

Приведенный выше код можно разместить везде, где вы определяете обычные псевдонимы.

Еслиnpmуже является функцией оболочки, это не сработает правильно.


Распространив это на ряд новых подкоманд -, кодif-then-elifбудет беспорядочным. Вместо этого:

npm () {
    case $1 in
        scripts)  jq '.scripts' package.json ;;
        hummus)   hummus-command ;;
        cinnamon) spice-command ;;
        baubles)  stuff ;;
        *) command npm "$@"
    esac
}

Это создаст команды scripts, hummus, cinnamonи baublesвложенные -, которые будут вызывать другие команды. Если первый аргумент функции не соответствует ни одной из пользовательских подкоманд -, настоящая команда npmвызывается, как и раньше.

Обратите внимание, что добавление альтернативы для существующей командыnpmsub -заменит эту команду sub -для npm. Если вы хотите вызвать эту реальную подкоманду -из вашей собственной альтернативной подкоманды -, вызовите command npm "$@"(, предполагая, что вы не вызывали shift, чтобы отключить подкоманду -. имя, и в этом случае вы хотите позвонить command npm sub-command "$@"вместо ).

Каждая новая команда sub -будет иметь доступ к аргументам командной строки функции, но вы можете shiftимя команды sub -исключить из списка:

npm () {
    case $1 in
        scripts)  jq '.scripts' package.json ;;
        hummus)
            shift
            echo '"npm hummus" was called with these additional arguments:'
            printf '%s\n' "$@"
            ;;
        *) command npm "$@"
    esac
}

Пример последней запущенной функции:

$ npm hummus "hello world" {1..3}
"npm hummus" was called with these additional arguments:
hello world
1
2
3
6
27.01.2020, 21:53

Теги

Похожие вопросы