Je voudrais définir un alias qui exécute les deux commandes suivantes consécutivement.
gnome-screensaver
gnome-screensaver-command --lock
En ce moment, j'ai ajouté
alias lock='gnome-screensaver-command --lock'
à mon .bashrc mais comme je verrouille mon poste de travail si souvent, il serait plus facile de taper une seule commande.
bash
configuration
yuriel
la source
la source
lock()
entre parenthèses donne l'erreursyntax error near unexpected token
msg'` ..$1
,$2
... dans le corps de la fonction.Les autres réponses répondent correctement à la question, mais votre exemple semble que la deuxième commande dépend de la sortie réussie de la première. Vous pouvez essayer une évaluation de court-circuit dans votre alias:
Maintenant, la deuxième commande ne sera même pas tentée à moins que la première ne réussisse. Une meilleure description de l'évaluation des courts-circuits est décrite dans cette question SO .
la source
git fetch && git pull origin master
et ne fonctionnait pas pour moi jusqu'à ce que je l' ai remplacé&&
avec;
.Les alias sont destinés à aliaser les noms de commandes. Tout ce qui va au-delà devrait être fait avec des fonctions.
Les alias sont des noms qui sont toujours associés au nom d'origine.
ll
est juste un type légèrement spécifique dels
.Une fonction est une nouvelle commande qui a une logique interne. Ce n'est pas simplement un renommage d'une autre commande. Il fait des opérations internes.
Techniquement, les alias dans le langage shell Bash sont si limités en capacités qu'ils sont extrêmement mal adaptés à tout ce qui implique plus d' une seule commande . Utilisez-les pour faire une petite mutation d'une seule commande, rien de plus.
Étant donné que l'intention est de créer une nouvelle commande qui effectue une opération qui se résoudra en interne dans d'autres commandes, la seule réponse correcte est d'utiliser une fonction ici:
L'utilisation d'alias dans un scénario comme celui-ci pose de nombreux problèmes. Contrairement aux fonctions, qui sont exécutées sous forme de commandes, les alias sont étendus dans la commande actuelle, ce qui entraînera des problèmes très inattendus lors de la combinaison de cette "commande" d'alias avec d'autres commandes. Ils ne fonctionnent pas non plus dans les scripts.
la source
gps() { git commit -m 'init '; git push; git status; }
Comme expliqué, les alias sont extrêmement limités, fragiles et leur seule intention est de renommer les commandes. Les abuser à des fins non liées vous amènera dans l'eau chaude, comme vous venez de le faire.Ça ne marche pas?
la source
Cela exécuterait les 2 commandes l'une après l'autre:
la source
Utilisez donc un point-virgule:
Cela ne fonctionne pas bien si vous souhaitez fournir des arguments à la première commande. Sinon, créez un script trivial dans votre répertoire $ HOME / bin.
la source
En ajoutant mes 2 cents à la discussion de 11 ans, essayez ceci:
alias lock="gnome-screensaver \gnome-screensaver-command --lock"
la source
Ajoutez cette fonction à votre
~/.bashrc
et redémarrez votre terminal ou exécutezsource ~/.bashrc
De cette façon, ces deux commandes s'exécuteront chaque fois que vous entrerez
lock
dans votre terminal.Dans votre cas spécifique, la création d'un
alias
peut fonctionner, mais je ne le recommande pas. Intuitivement, nous penserions que la valeur d'un alias fonctionnerait de la même manière que si vous saisissiez la valeur dans le terminal. Mais ce n'est pas le cas:et
N'utilisez donc pas d'alias, sauf si vous le devez. https://ss64.com/bash/alias.html
la source
J'ai rencontré un problème lors de la déclaration d'alias
~/.bashrc
. Mon terminal n'a pas reconnu les alias dans lesquels j'ai déclaré~/.bashrc
. J'ai appris de l'article (joint en bas) que Mac OS X fonctionnelogin-shell
par défaut, donc il appelle à la~/.bash_profile
place de~/.bashrc
.Si vous rencontrez le même problème lors de la déclaration de vos alias, vous pouvez vous référer au lien suivant pour résoudre le problème:
http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html
la source
source .bashrc
après avoir enregistré les modifications dans le fichier, pour permettre à l'alias d'être reconnu sans se déconnecter.