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?
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.
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; }
Vous voulez probablement un elsecas afin que la commande d'origine s'exécute si le deuxième paramètre n'est pasbar :foo() { if [ "$1" = "bar" ]; then echo "doing something..."; else command foo "$@"; fi; }
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; }
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. ....
Réponses:
Le nom d'alias est sur le côté gauche, vous pouvez donc avoir n'importe quelle commande multi-mots à droite:
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 ):
Donc, si vous voulez toujours utiliser
sudo
avec d'autres commandes mais pas avecshutdown
et si vous pouvez vous permettre d'aliasshutdown
à autre chose, vous pouvez avoir:Maintenant,
sudo anything_else
cela fonctionnera comme prévu (en supposant que vous n'avez pas d'alias pouranything_else
, mais si vous l'avez, cela n'aurait pas fonctionné auparavant non plus); maissudo shutdown
sera équivalent àsudo echo nope
et il affichera cette chaîne.la source
alias cd="cd "
aliasalias X="<directory-with-long-name>"
à une seule lettre pour passer d'un endroit à l'autre plus facilement.alias gti="git "
etalias lgo="log"
Utilisez une fonction:
la source
else
cas afin que la commande d'origine s'exécute si le deuxième paramètre n'est pasbar
:foo() { if [ "$1" = "bar" ]; then echo "doing something..."; else command foo "$@"; fi; }
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
ls
et fait en sorte que la sortie soit dirigéemore
si l'argument consiste en (uniquement)-la
.En une ligne:
Sortie automatique des tuyaux:
la source
Vous pouvez utiliser un tiret comme solution de contournement:
alias sudo-shutdown="your command"
la source
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:
Cela ouvre un tout nouveau monde. Vous pourriez alors avoir quelques commandes ou même un script:
la source