ZSH псевдоним с параметром


94

Я пытаюсь создать псевдоним с параметром для моего простого git add / commit / push.

Я видел, что Function можно использовать как псевдоним, поэтому я попробовал, но не смог ..

раньше у меня было:

alias gitall="git add . ; git commit -m 'update' ; git push"

Но я хочу иметь возможность изменять свои коммиты:

function gitall() {
    "git add ."
    if [$1 != ""]
        "git commit -m $1"
    else
        "git commit -m 'update'"
    fi
    "git push"
}

(я знаю, что это ужасная практика мерзавцев)

Ответы:


113

Вы не можете создать псевдоним с аргументами *, это должна быть функция. Ваша функция близка, вам просто нужно заключить в кавычки определенные аргументы вместо целых команд и добавить пробелы внутри [].

gitall() {
    git add .
    if [ "$1" != "" ] # or better, if [ -n "$1" ]
    then
        git commit -m "$1"
    else
        git commit -m update
    fi
    git push
}

*: Большинство оболочек не допускают аргументов в псевдонимах, я считаю, что csh и производные делают это, но вы все равно не должны их использовать .


cshесть, но у него вообще нет функций. (Я не знаю, нет ли функций, потому что псевдонимы могут принимать параметры, или если псевдонимы принимают параметры, потому что нет функций, или что-то еще.)
Чепнер

Так вы бы назвали это (из оболочки) как gitall "my commit message"? или вы бы это назвалиgitall('my commit message')
archae0pteryx

Функции @ archae0pteryx вызываются точно так же, как и любые другие команды, поэтому gitall "my commit message".
Кевин

Я бы предложил getall() {без предшествующего function- конечно, это законно в любом случае в zsh, но это единственное изменение сделает его совместимым со всеми POSIX-совместимыми оболочками.
Чарльз Даффи,

9
Кстати, если вы использовали git commit -m "${1:-update}"(расширение параметра с предоставленным по умолчанию), тогда вам вообще не понадобится этот ifоператор.
Чарльз Даффи

104

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

alias example='f() { echo Your arg was $1. };f'

Я вижу, что этот подход часто используется в псевдонимах .gitconfig.


7
Такой хакерский и в то же время такой красивый
рококо

14
Зачем вообще создавать псевдоним? Просто вызовите функцию example.
tripleee

1
Кроме того, с опозданием вам понадобится точка с запятой перед закрывающей скобкой.
tripleee

Это было прекрасно. Благодаря этому я смог создать псевдоним, который добавляет псевдоним к файлу rc, а затем перезагружает указанный файл rc. ❤️ alias addalias = 'f () {echo "псевдоним" $ 1 >> ~ / .zshrc &&. ~ / .zshrc}; f '
MayTheSForceBeWithYou

5
не нужно добавлять какие-либо имена в глобальную область видимости, просто используйте анонимную функцию:alias example='(){ echo Your arg was $1. ;}'
maoizm

10

Я использовал эту функцию в файле .zshrc:

function gitall() {
    git add .
    if [ "$1" != "" ]
    then
        git commit -m "$1"
    else
        git commit -m update # default commit message is `update`
    fi # closing statement of if-else block
    git push origin HEAD
}

Вот git push origin HEAD отвечает за удаленное нажатие вашей текущей ветки.

Из командной строки запустите эту команду: gitall "commit message goes here"

Если мы просто запустим gitallбез какого-либо сообщения о фиксации, то сообщение о фиксации будет таким, updateкак сказала функция.


4

"git add ."а другие команды между ними "- это просто строки для bash, удалите "s.

Возможно, вы захотите использовать [ -n "$1" ]вместо этого в своем теле if.


0

Я попробовал принятый ответ (Кевин), но получил следующую ошибку

defining function based on alias `gitall'
parse error near `()'

Следовательно, изменил синтаксис на этот, основываясь на проблеме git, и это сработало.

    function gitall {
    git add .
    if [ "$1" != "" ]
    then
        git commit -m "$1"
    else
        git commit -m update
    fi
    git push
    }
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.