Plusieurs commandes dans un alias pour bash
j'aimerais 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.
7 réponses
, Essayez:
alias lock='gnome-screensaver; gnome-screensaver-command --lock'
ou
lock() {
gnome-screensaver
gnome-screensaver-command --lock
}
dans votre .bashrc
la deuxième solution vous permet d'utiliser des arguments.
les autres réponses répondent à la question correctement, mais votre exemple ressemble à la deuxième commande dépend de la première étant sortie avec succès. Vous pouvez essayer un évaluation de court-circuit dans votre alias:
alias lock='gnome-screensaver && gnome-screensaver-command --lock'
maintenant le second commandement ne sera même pas tenté à moins que le premier ne soit réussi. Une meilleure description de l'évaluation des courts-circuits est décrite dans la question .
sont destinés à et à . En dehors de cela devrait être fait avec les fonctions.
alias ll='ls -l' # The ll command is an alias for ls -l
Les alias sont des noms qui sont toujours associés au nom original. ll
est juste un type légèrement spécifique de ls
.
d() {
if exists colordiff; then
colordiff -ur "$@"
elif exists diff; then
diff -ur "$@"
elif exists comm; then
comm -3 "" ""
fi | less
}
une fonction est Une nouvelle commande qui a sa logique interne. Ce n'est pas simplement un changement de nom d'une autre commande. Il n'opérations internes.
techniquement, les alias en langage shell Bash sont si limités en capacités qu'ils sont extrêmement mal adaptés pour tout ce qui implique plus que une seule commande . Les utiliser pour faire une petite mutation d'un seul commandement, rien de plus.
puisque l'intention est de créer une nouvelle commande qui exécute une opération qui se résoudra en interne dans d'autres commandes, la seule réponse correcte est d'utiliser une fonction ici:
lock() {
gnome-screensaver
gnome-screensaver-command --lock
}
L'utilisation d'alias dans un scénario comme celui-ci se heurte à de nombreux problèmes. Contrairement aux fonctions, qui sont exécutées en tant que commandes, les alias sont étendus à la commande courante, ce qui entraînera des problèmes très inattendus lors de la combinaison de cet alias "command" avec d'autres commandes. Ils ne fonctionnent pas non plus dans les scripts.
ça ne marche pas?
alias whatever='gnome-screensaver ; gnome-screensaver-command --lock'
cela exécuterait les 2 commandes l'une après l'autre:
alias lock='gnome-screensaver ; gnome-screensaver-command --lock'
utilisez donc un point-virgule:
alias lock='gnome-screensaver; gnome-screen-saver-command --lock'
Cela ne fonctionne pas bien si vous voulez fournir des arguments à la première commande. Alternativement, créez un script trivial dans votre répertoire $HOME/bin.
j'ai eu un problème en déclarant des alias dans ~/.bashrc
. Mon terminal n'a pas reconnu les alias que j'ai déclarés dans ~/.bashrc
. J'ai appris de l'article (ci-joint sur le bas) que Mac OS X exécute login-shell
par défaut donc il appelle ~/.bash_profile
au lieu de ~/.bashrc
.
si vous rencontrez le même problème en déclarant 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