¿Hay alguna manera de alias un comando multi-redactado en Unix?
11
Estoy tratando de alias el comando sudo shutdownpero en mi .profileno puedo simplemente hacer alias "sudo shutdown"="my command". ¿Hay alguna otra forma de alias de comandos de múltiples palabras en Unix?
¡Probé todas estas técnicas y todas funcionaron! ¡Gracias a todos!
agentbanks217
Pruebe también la solución en mi edición , ya que me di cuenta de que realmente tenía la intención de tener 'sudo shutdown' como un alias demasiado tarde.
Respuestas:
19
El nombre del alias está en el lado izquierdo, por lo que puede tener cualquier comando de múltiples palabras a la derecha:
alias my_alias="multi worded command"
EDITAR: Sin embargo, si realmente desea tener nombres de alias de varias palabras, en su ejemplo, si realmente desea que "sudo shutdown" sea el alias, puede solucionarlo utilizando la siguiente función de alias (en el manual de bash ):
A trailing space in value causes the next word to be checked for
alias substitution when the alias is expanded.
Por lo tanto, si aún desea usar sudocon otros comandos pero no con shutdowny si puede permitirse el lujo de usar un alias shutdownpara otra cosa, puede tener:
alias sudo='sudo '
alias shutdown="echo nope"
Ahora, sudo anything_elsefuncionará como se esperaba (suponiendo que no tenga un alias anything_else, pero si lo tuviera tampoco hubiera funcionado antes); pero sudo shutdownserá equivalente a sudo echo nopee imprimirá esa cadena.
Gracias, respuesta subestimada; He estado usando alias cd="cd "con alias de una letra alias X="<directory-with-long-name>"para saltar de un lugar a otro con mayor facilidad.
Luke Davis
De acuerdo, esto es realmente super útil. alias gti="git "alias lgo="log"
Escribí
4
Usa una función:
foo() { if [ "$1" = "bar" ]; then echo "doing something..."; fi; }
Probablemente desee un elsecaso para que el comando original se ejecute si el segundo parámetro no esbar :foo() { if [ "$1" = "bar" ]; then echo "doing something..."; else command foo "$@"; fi; }
La documentación de Bash dice "Para casi cualquier propósito, las funciones de shell son preferibles a los alias". Aquí hay una función de shell que reemplaza lsy hace que la salida se canalice moresi el argumento consiste en (solo) -la.
ls() {
if [[ $@ == "-la" ]]; then
command ls -la | more
else
command ls "$@"
fi
}
Como una línea:
ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }
Prefiero simplemente poner un archivo ejecutable en / usr / local / bin (asegúrese de que esté en su ruta) que luego contenga los comandos que deseo ejecutar. El nombre del script sería el comando que aparece. asegúrese de usar chmod + x / usr / local / bin / your_script.
Entonces el guión podría llamarse 'apagado'
El contenido del cierre del archivo sería:
#!/bin/sh
sudo shutdown
Eso abre un mundo completamente nuevo. Entonces podría tener un par de comandos o incluso un script:
#!/usr/bin/env python
print "hi"
# more stuff. ....
Respuestas:
El nombre del alias está en el lado izquierdo, por lo que puede tener cualquier comando de múltiples palabras a la derecha:
EDITAR: Sin embargo, si realmente desea tener nombres de alias de varias palabras, en su ejemplo, si realmente desea que "sudo shutdown" sea el alias, puede solucionarlo utilizando la siguiente función de alias (en el manual de bash ):
Por lo tanto, si aún desea usar
sudo
con otros comandos pero no conshutdown
y si puede permitirse el lujo de usar un aliasshutdown
para otra cosa, puede tener:Ahora,
sudo anything_else
funcionará como se esperaba (suponiendo que no tenga un aliasanything_else
, pero si lo tuviera tampoco hubiera funcionado antes); perosudo shutdown
será equivalente asudo echo nope
e imprimirá esa cadena.fuente
alias cd="cd "
con alias de una letraalias X="<directory-with-long-name>"
para saltar de un lugar a otro con mayor facilidad.alias gti="git "
alias lgo="log"
Usa una función:
fuente
else
caso para que el comando original se ejecute si el segundo parámetro no esbar
:foo() { if [ "$1" = "bar" ]; then echo "doing something..."; else command foo "$@"; fi; }
Para citar de: Bash: espacios en nombre de alias
La documentación de Bash dice "Para casi cualquier propósito, las funciones de shell son preferibles a los alias". Aquí hay una función de shell que reemplaza
ls
y hace que la salida se canalicemore
si el argumento consiste en (solo)-la
.Como una línea:
Salida de tubería automática:
fuente
Puede usar un guión como solución:
alias sudo-shutdown="your command"
fuente
Prefiero simplemente poner un archivo ejecutable en / usr / local / bin (asegúrese de que esté en su ruta) que luego contenga los comandos que deseo ejecutar. El nombre del script sería el comando que aparece. asegúrese de usar chmod + x / usr / local / bin / your_script.
Entonces el guión podría llamarse 'apagado'
El contenido del cierre del archivo sería:
Eso abre un mundo completamente nuevo. Entonces podría tener un par de comandos o incluso un script:
fuente