Je veux facilement définir un alias git-go
pour cette ligne de terminal:
git commit -m "init "; git push; git status
Donc, quand j'entre dans git-go, cette ligne doit entrer.
Comment puis je faire ça? Les réponses que j'ai vues ne couvrent que l'alias d'une commande sans paramètres. Mais je veux définir un alias sur une ligne de terminal arbitraire.
command-line
bash
alias
Philip Rego
la source
la source
Réponses:
Vous procédez de la même manière que vous définiriez n'importe quel alias.
La situation où cela devient délicat n'est pas lorsqu'un alias exécute une commande et passe des arguments à cette commande, ni même lorsqu'un alias exécute plusieurs commandes séparées par
;
, mais plutôt lorsque vous voulez qu'un alias accepte et utilise ses propres arguments de ligne de commande .Par exemple, tout ce que vous écrivez après le nom de cet alias sera collé à la fin, et donc passé comme arguments de ligne de commande à la troisième
git
commande, aprèsgit status
. (Vraiment, ce n'est pas tant que le texte suivant est collé à la fin, mais plutôt que le texte suivant est laissé seul et que le nom d'alias est remplacé par sa définition.)Vous pouvez donc exécuter votre alias sans arguments, ce qui fonctionne, et la dernière commande est
git status
:Ou vous pouvez l'exécuter avec les arguments que vous souhaitez transmettre
git status
. Par exemple, lorsque vous l'exécutez de cette façon, la dernière commande estgit-status --show-stash
:Ce que vous ne pouvez pas faire avec un alias dans Bash (et d'autres shells de style Bourne), c'est de faire en sorte que l'alias accepte les arguments de ligne de commande et les place ailleurs qu'à la fin.
Par exemple, supposons que vous vouliez
git-go
accepter un argument qu'il utilise pour le message de validation. Vous ne pourriez pas écrire ceci en tant qu'alias. La solution serait de l'écrire en tant que fonction shell à la place:Dans la définition d'une fonction d'enveloppe, les paramètres de position
$1
,$2
et ainsi de suite maintiennent les valeurs des arguments de ligne de commande transmis à la fonction d'enveloppe. Les alias n'ont aucune fonctionnalité qui correspond à cela, car l'expansion des alias est vraiment une forme de traitement de macro, qui a lieu très tôt, lorsque le shell analyse une commande.Vous pouvez bien sûr l'écrire en tant que fonction shell même si vous n'avez pas besoin d'utiliser des paramètres de position dans la définition, comme le suggère Videonauth .
la source
git-go
dans votre CHEMIN etgit go
cela fonctionnera.Vous pouvez le déclarer une fonction dans votre
~/.bash_aliases
fichier comme ceci:ou vous pouvez créer un alias dans le même fichier comme ceci:
N'oubliez pas de rouvrir votre terminal ou de source le fichier (
. ~/.bash_aliases
) après l'avoir modifié.la source
Comme vous traitez des
git
commandes, vous voudrez peut-être également connaître la syntaxe pour ajouter un alias, en particulier pourgit
:Cela ajoutera un nouvel alias à votre
git
configuration locale (at~/.gitconfig
) et vous permettra d'émettreà l'intérieur d'un
git
référentiel. Chaque fois que vous exécutezgit go
un shell est invoqué et la commande luigit commit -m "init"; git push; git status
est passée.Voir la documentation de git pour plus de détails.
la source
C'était un problème de citation. J'avais essayé ceci:
Mais j'ai cette erreur:
J'ai eu cette erreur parce que j'utilisais mal les guillemets imbriqués. Voici la syntaxe correcte:
Ou:
Ou sans guillemets si aucun espace blanc dans le message de validation:
la source
init
; les friandises de coque'init'
,"init"
etinit
le même. (Donc, vous voudrez peut-être remettre la version d'origine et également montrer la nouvelle version, pour illustrer la situation où des guillemets imbriqués sont nécessaires.) Quant à pouvoir ajouter le reste du message, vous pouvez le passer en ligne de commande argument si (comme indiqué dans Videonauth et mes réponses) vous avez défini une fonction au lieu d'un alias. Par exemple, vous pouvez définirgit-go() { git commit -m "init $1"; git push; git status; }
(c'est ce que j'ai dans ma réponse mais avec"init $1"
au lieu de juste"$1"
).