Псевдонім ZSH з параметром


94

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

Я бачив, що функцію можна використовувати як псевдонім, тому я намагаюся, але я не встиг ..

до того, як я мав:

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"
}

(я знаю, що це жахлива практика git)

Відповіді:


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робить, але він взагалі не має функцій. (Я не знаю, чи немає функцій, оскільки псевдоніми можуть приймати параметри, чи псевдоніми беруть параметри, оскільки функцій немає, або що.)
chepner

Отже, ви б назвали це (з оболонки) як 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.
триплеє

1
Також із запізненням вам потрібна крапка з комою перед фіксуючою дужкою.
триплеє

Це було красиво. За допомогою цього я зміг створити псевдонім, який додає псевдонім у файл rc, а потім перезавантажує вказаний файл rc. Псевдонім 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.