¿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?

agentbanks217
fuente
¡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.

Costi Ciudatu
fuente
2
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; }
marco
fuente
Probablemente desee un elsecaso para que el comando original se ejecute si el segundo parámetro no es bar :foo() { if [ "$1" = "bar" ]; then echo "doing something..."; else command foo "$@"; fi; }
davidg
2

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 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; }

Salida de tubería automática:

ls -la
abalter
fuente
1

Puede usar un guión como solución: alias sudo-shutdown="your command"

Armandino
fuente
1

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. ....

fuente