Existe-t-il un moyen d'alias une commande multi-mots sous Unix?

11

J'essaie d'alias la commande sudo shutdownmais dans mon .profileje ne peux pas simplement faire alias "sudo shutdown"="my command". Existe-t-il un autre moyen d'alias des commandes multi-mots sous Unix?

agentbanks217
la source
J'ai essayé toutes ces techniques et elles ont toutes fonctionné! Merci tout le monde!
agentbanks217
Essayez également la solution dans mon montage , car je me suis rendu compte que vous aviez vraiment l'intention d'avoir 'sudo shutdown' comme alias un peu trop tard.

Réponses:

19

Le nom d'alias est sur le côté gauche, vous pouvez donc avoir n'importe quelle commande multi-mots à droite:

alias my_alias="multi worded command"

EDIT: Cependant, si vous voulez vraiment avoir des noms d'alias de plusieurs mots - dans votre exemple, si vous voulez vraiment que "sudo shutdown" soit l'alias, vous pouvez contourner cela en utilisant la fonctionnalité d'alias suivante (dans le manuel bash ):

A trailing space in  value causes the next word to be checked for
alias substitution when the alias is expanded.

Donc, si vous voulez toujours utiliser sudoavec d'autres commandes mais pas avec shutdownet si vous pouvez vous permettre d'alias shutdownà autre chose, vous pouvez avoir:

alias sudo='sudo '
alias shutdown="echo nope"

Maintenant, sudo anything_elsecela fonctionnera comme prévu (en supposant que vous n'avez pas d'alias pour anything_else, mais si vous l'avez, cela n'aurait pas fonctionné auparavant non plus); mais sudo shutdownsera équivalent à sudo echo nopeet il affichera cette chaîne.

Costi Ciudatu
la source
2
Merci, réponse sous-estimée; J'ai utilisé des alias cd="cd "alias alias X="<directory-with-long-name>"à une seule lettre pour passer d'un endroit à l'autre plus facilement.
Luke Davis
D'accord, c'est vraiment super utile. J'ai mal saisi les commandes git, cela résout cela pour moi: alias gti="git "etalias lgo="log"
BananaNeil
4

Utilisez une fonction:

foo() { if [ "$1" = "bar" ]; then echo "doing something..."; fi; }
marco
la source
Vous voulez probablement un elsecas afin que la commande d'origine s'exécute si le deuxième paramètre n'est pas bar :foo() { if [ "$1" = "bar" ]; then echo "doing something..."; else command foo "$@"; fi; }
davidg
2

Pour citer: Bash: Espaces dans le nom d'alias

La documentation de Bash indique "Pour presque tous les usages, les fonctions shell sont préférées aux alias." Voici une fonction shell qui remplace lset fait en sorte que la sortie soit dirigée moresi l'argument consiste en (uniquement) -la.

ls() {
    if [[ $@ == "-la" ]]; then
        command ls -la | more
    else
        command ls "$@"
    fi
}

En une ligne:

ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }

Sortie automatique des tuyaux:

ls -la
abalter
la source
1

Vous pouvez utiliser un tiret comme solution de contournement: alias sudo-shutdown="your command"

armandino
la source
1

Je préfère simplement mettre un fichier exécutable dans / usr / local / bin (assurez-vous qu'il se trouve dans votre chemin) qui contient ensuite les commandes que je souhaite exécuter. Le nom du script serait la commande qui apparaît. assurez-vous de chmod + x / usr / local / bin / your_script.

Ainsi, le script pourrait être appelé «arrêt»

Le contenu de l'arrêt du fichier serait:

#!/bin/sh
sudo shutdown

Cela ouvre un tout nouveau monde. Vous pourriez alors avoir quelques commandes ou même un script:

#!/usr/bin/env python
print "hi"
# more stuff. ....

la source