Як встановити псевдонім для термінальної лінії?


9

Я хочу легко встановити псевдонім git-goдля цієї термінальної лінії:

git commit -m "init "; git push; git status

Отже, коли я ввожу git-go, цей рядок повинен входити.

Як я можу це зробити? Я бачив відповіді лише псевдоніми команди без параметрів. Але я хочу встановити псевдонім довільній термінальній лінії.


Що ви спробували? Які ще запитання ви прочитали? askubuntu.com/q/17536/507051 пояснює це досить непогано, про що саме у вас питання?
десерт

У моїй проблемі було використання подвійних лапок замість одиничних для зовнішніх лапок.
Філіп Рего

Ви також можете зробити це навпаки, використовуючи подвійні лапки зовні та одинарні цитати з внутрішньої сторони.
Videonauth

Відповіді:


13

Ви робите це так само, як і будь-який псевдонім.

alias git-go='git commit -m "init "; git push; git status'

Ситуація, коли стає хитрою, полягає не в тому, коли псевдонім виконує команду і передає аргументи цій команді, а також навіть якщо псевдонім виконує кілька команд, розділених на ;, а натомість, коли ви хочете, щоб псевдонім прийняв і використовував власні аргументи командного рядка. .

Наприклад, все, що ви напишете після імені цього псевдоніма, буде вставлено в кінець і, таким чином, передане як аргументи командного рядка до третьої gitкоманди, після git status. (Дійсно, наступний текст вставляється не в кінці, а стільки, що наступний текст залишається в спокої, а ім'я псевдоніма замінюється його визначенням.)

Таким чином, ви можете запустити свій псевдонім без аргументів, що працює, і остання команда git status:

git-go

Або ви можете запустити це з аргументами, які ви хочете передати git status. Наприклад, коли ви запускаєте його таким чином, остання команда git-status --show-stash:

git-go --show-stash

Те, що ви не можете зробити з псевдонімом Bash (та іншими оболонками в стилі Борна), - це змусити псевдонім приймати аргументи командного рядка і розмістити їх в іншому місці, ніж в кінці.

Наприклад, припустимо, що ви хотіли git-goприйняти аргумент, який він використовує для повідомлення фіксації. Ви б не змогли написати це як псевдонім. Рішенням було б записати це замість функції оболонки:

git-go() { git commit -m "$1"; git push; git status; }

У визначенні функції оболонки, позиційні параметри $1, $2і так далі утримувати значення аргументів командного рядка , переданих функцію оболонки. Псевдоніми не мають функціоналу, який відповідає цьому, оскільки розширення псевдоніму - це дійсно форма макрообробки, що відбувається дуже рано, коли оболонка аналізує команду.

Звичайно, ви можете записати це як функцію оболонки, навіть якщо вам не потрібно використовувати параметри позиції у визначенні, як це пропонує Videonauth .


1
Ще краще: помістіть сценарій, названий git-goу вашому PATH, і він git goбуде працювати.
D. Ben Knoble

10

Ви можете оголосити це функцією у вашому ~/.bash_aliasesфайлі так:

git-go(){
    git commit -m "init "
    git push
    git status
}

або ви можете створити псевдонім у тому ж файлі, як так:

alias git-go='git commit -m "init "; git push; git status'

Не забудьте знову відкрити свій термінал або джерело файлу ( . ~/.bash_aliases) після його зміни.


1
Однією з переваг написання функції оболонки замість псевдоніму є те, що не потрібно вводити лапки. Таким чином, ця відповідь стосується центральної проблеми, яка виявилася в ОП більш безпосередньо, ніж у мене.
Елія Каган

@EliahKagan Обидва чудово підходять до цього питання, хоча у вас більше. Приємно бачити вас назад.
Videonauth

4

Оскільки ви маєте справу з gitкомандами, ви також можете знати синтаксис для додавання псевдоніму, спеціально для git:

git config --global alias.go '!sh -c "git commit -m \"init\"; git push; git status"'

Це додасть новий псевдонім у вашій локальній gitконфігурації (at ~/.gitconfig) та дозволить опублікувати

git go

коли всередині gitсховища. Щоразу, коли ви запускаєте git goоболонку, викликається і команда git commit -m "init"; git push; git statusпередається їй.

Детальнішу інформацію див. У документації на git .


3

Це була проблема котирування. Я спробував це:

alias="git commit -m "init "; git push; git status"

Але отримали цю помилку:

bash: ; git push; git status: command not found

Я отримав цю помилку, оскільки я неправильно використовував вкладені цитати. Ось правильний синтаксис:

alias='git commit -m "init "; git push; git status'

Або:

alias="git commit -m 'init '; git push; git status"

Або без лапок, якщо в повідомленні про комісію немає пробілу:

alias="git commit -m init; git push; git status"

Дякуємо, що опублікували цю відповідь (так як моя відповідь та Videonauth не особливо зосереджуються на питанні цитування). Чому з цікавості ви захотіли місця у своїх повідомленнях?
Елія Каган

Я вручну вставляв цей рядок і додав повідомлення після пробілу, але це не має сенсу, тому я його вийняв.
Філіп Рего

1
У цьому випадку вам не потрібно цитувати init; оболонка лікує 'init', "init"і initте ж саме. (Тож ви, можливо, захочете повернути оригінальну версію, а також показати нову версію, щоб проілюструвати ситуацію, коли потрібні вкладені цитати.) Що стосується можливості додати решту повідомлення, ви можете передати це як командний рядок аргумент, якщо (як показано у Videonauth та мої відповіді) ви визначили функцію замість псевдоніму. Наприклад, ви можете визначити git-go() { git commit -m "init $1"; git push; git status; }(що я маю у своїй відповіді, але "init $1"не просто "$1").
Елія Каган

Дякую, що я хотів спробувати далі.
Філіп Рего
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.