Me gustaría definir un alias que ejecute los siguientes dos comandos consecutivamente.
gnome-screensaver
gnome-screensaver-command --lock
Ahora mismo he añadido
alias lock='gnome-screensaver-command --lock'
a mi .bashrc, pero dado que bloqueo mi estación de trabajo con tanta frecuencia, sería más fácil escribir un solo comando.
bash
configuration
yuriel
fuente
fuente
lock()
paréntesis da error msg''syntax error near unexpected token
..$1
,$2
... en el cuerpo de la función.Las otras respuestas responden la pregunta adecuadamente, pero su ejemplo parece que el segundo comando depende de que el primero salga con éxito. Es posible que desee probar una evaluación de cortocircuito en su alias:
Ahora el segundo comando ni siquiera se intentará a menos que el primero sea exitoso. Una mejor descripción de la evaluación de cortocircuito se describe en esta pregunta SO .
fuente
git fetch && git pull origin master
y no funcionó para mí hasta que sustituye&&
a;
.Los alias están destinados a alias de nombres de comandos. Cualquier cosa más allá de eso debe hacerse con funciones.
Los alias son nombres que todavía están asociados con el nombre original.
ll
es solo un tipo ligeramente específico dels
.Una función es un nuevo comando que tiene lógica interna. No es simplemente un cambio de nombre de otro comando. Realiza operaciones internas.
Técnicamente, los alias en el lenguaje de shell Bash tienen capacidades tan limitadas que son extremadamente inadecuados para cualquier cosa que implique más de un solo comando . Úselos para hacer una pequeña mutación de un solo comando, nada más.
Dado que la intención es crear un nuevo comando que realice una operación que se resolverá internamente en otros comandos, la única respuesta correcta es usar una función aquí:
El uso de alias en un escenario como este se encuentra con muchos problemas. Al contrario de las funciones, que se ejecutan como comandos, los alias se expanden en el comando actual, lo que generará problemas muy inesperados al combinar este "comando" de alias con otros comandos. Tampoco funcionan en guiones.
fuente
gps() { git commit -m 'init '; git push; git status; }
Como se explicó, los alias son extremadamente limitados, frágiles y su única intención es cambiar el nombre de los comandos. Abusar de ellos para fines no relacionados lo llevará a aguas calientes, como acaba de experimentar.¿Esto no funciona?
fuente
Esto ejecutaría los 2 comandos uno tras otro:
fuente
Entonces use un punto y coma:
Esto no funciona bien si desea proporcionar argumentos al primer comando. Alternativamente, cree un script trivial en su directorio $ HOME / bin.
fuente
Agregando mis 2 centavos a la discusión de 11 años intente esto:
alias lock="gnome-screensaver \gnome-screensaver-command --lock"
fuente
Agregue esta función a su
~/.bashrc
y reinicie su terminal o ejecutesource ~/.bashrc
De esta manera, estos dos comandos se ejecutarán cada vez que ingrese
lock
en su terminal.En su caso específico, crear un
alias
puede funcionar, pero no lo recomiendo. Intuitivamente, pensaríamos que el valor de un alias se ejecutaría igual que si ingresara el valor en la terminal. Sin embargo, ese no es el caso:y
Así que no uses un alias a menos que sea necesario. https://ss64.com/bash/alias.html
fuente
Encontré un problema al declarar alias en
~/.bashrc
. Mi terminal no reconoció los alias que declaró~/.bashrc
. Aprendí del artículo (adjunto en la parte inferior) que Mac OS X se ejecutalogin-shell
por defecto, por lo tanto, llama en~/.bash_profile
lugar de~/.bashrc
.Si tiene el mismo problema al declarar sus alias, puede consultar el siguiente enlace para resolver el problema:
http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html
fuente
source .bashrc
después de guardar los cambios en el archivo, para permitir que se reconozca el alias sin cerrar sesión.