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 puisque je verrouille souvent mon poste de travail, il serait plus facile de taper une seule commande.
Essayer:
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 correctement à la question, mais votre exemple ressemble à celui de la seconde commande dépend de la réussite de la première. Vous voudrez peut-être essayer un évaluation de court-circuit dans votre alias:
alias lock='gnome-screensaver && gnome-screensaver-command --lock'
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 ce question SO .
Les alias sont destinés à aliasing noms de commande. Au-delà, cela devrait être fait avec des 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 d'origine. ll
n'est qu'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 "$1" "$2"
fi | less
}
Une fonction est une nouvelle commande qui a une logique interne. Ce n'est pas simplement un changement de nom d'une autre commande. Il fait des opérations internes.
Techniquement, les alias dans le langage Bash Shell ont des capacités si limitées qu’ils conviennent extrêmement mal à tout ce qui implique plus de ne seule commande. Utilisez-les pour faire une petite mutation d'une commande unique, rien de plus.
Puisque l'intention est de créer une nouvelle commande qui effectue une opération qui sera résolue 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 développés dans la commande en cours, ce qui entraînera des problèmes très inattendus lors de la combinaison de cet alias "commande" avec d'autres commandes. Ils ne fonctionnent pas non plus dans les scripts.
Est-ce que ç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'
Donc utilisez un point-virgule:
alias lock='gnome-screensaver; gnome-screen-saver-command --lock'
Cela ne fonctionne pas bien si vous souhaitez fournir des arguments à la première commande. Vous pouvez également créer un script trivial dans votre répertoire $ HOME/bin.
Je seconde l'approche @mouviciel. L'utilisation de ce qui suit fonctionne plutôt bien pour les commandes simples:
alias doSomething='command1; command2'
Pour les commandes nécessitant des arguments, utilisez simplement les fonctions suivantes:
doSomething() {
command1
command2 --lock
}