Comment passer les arguments de ligne de commande à un alias? Voici un exemple:
alias mkcd = 'mkdir $ 1; cd $ 1; '
Mais dans ce cas, $ xx est traduit au moment de la création de l'alias et non au moment de l'exécution. J'ai cependant créé une solution de contournement en utilisant une fonction shell (après avoir googlé un peu) comme ci-dessous:
fonction mkcd () { mkdir 1 $ cd $ 1 }
Je voulais juste savoir s'il existe un moyen de créer des alias qui acceptent les paramètres CL.
BTW - J'utilise 'bash' comme shell par défaut.
mkdir mydirectoryname && cd $_
Réponses:
Vous avez trouvé le moyen: créez une fonction au lieu d'un alias. Le shell C a un mécanisme pour faire des arguments aux alias, mais bash et le shell Korn ne le font pas, car le mécanisme de la fonction est plus flexible et offre la même capacité.
la source
.bashrc
fichier. Par exemple, # créez un alias qui prend le numéro de port par l'alias utilisateur serve = "python -m SimpleHTTPServer $ 1" Après avoir apporté la modification dans le fichier .bashrc, assurez-vous que vous entrez la commande suivante. ~ $ source .bashrc Vous devriez pouvoir utiliser ceci comme ceci ~ $ serve 8998Juste pour réitérer ce qui a été posté pour les autres obus, dans Bash les travaux suivants:
Exécution de ce qui suit:
Donne la sortie ci-dessous:
la source
Bash
de remplacer$1
et$2
avec les paramètres passés à la fonction. Les guillemets simples disent à Bash de ne pas faire cela.function blah(){ echo "First: $1"; echo "Second: $2"; }
Vous ne pouvez pas dans ksh, mais vous pouvez dans csh.
Dans ksh, la fonction est la voie à suivre. Mais si vous vouliez vraiment vraiment utiliser l'alias:
la source
csh
n'est généralement pas ce qu'une personne moderne devrait vouloir utiliser. L'indirection alias-qui-crée-une-fonction-puis-exécute-cette-fonction est relativement populaire, mais n'offre aucun avantage sur une fonction appropriée pour autant que je sache. (La fonction doit de toute façon citer correctement son argument.) Vote en aval.Pour citer la page de manuel de bash:
Il semble donc que vous ayez répondu à votre propre question - utilisez une fonction au lieu d'un alias
la source
Vous pouvez également trouver cette commande utile:
mkdir dirname && cd $_
où dirname est le nom du répertoire que vous souhaitez créer
la source
$_
est la sortie de la dernière commande unix.stackexchange.com/a/271693/169772J'ai trouvé que les fonctions ne peuvent pas être écrites dans un
~/.cshrc
fichier. Ici en alias qui prend des argumentspar exemple, des arguments passés à la commande 'find'
où abc est l'argument passé en tant que!: 1
la source
!:1
que cela signifiait. J'ai dû faire défiler pour voir ici que c'était l'argument. Une bonne réponse ne laisse pas plus de questions, même si ce n'était pas pour le type de shell OPs.La manière la plus simple est d'utiliser la fonction et non l'alias. vous pouvez toujours appeler une fonction à tout moment depuis le cli. En bash, vous pouvez simplement ajouter un nom de fonction () {commande} qui se charge de la même manière qu'un alias.
Je ne suis pas sûr des autres obus
la source
En fait, vous ne pouvez pas faire ce que vous voulez avec les alias Bash, car les alias sont statiques. Utilisez plutôt la fonction que vous avez créée.
Regardez ici pour plus d'informations: http://www.mactips.org/archives/2008/01/01/increase-productivity-with-bash-aliases-and-functions/ . (Oui, je sais que c'est mactips.org, mais il s'agit de Bash, alors ne vous inquiétez pas.)
la source
Cela fonctionne dans ksh:
L'option "-x" rend l'alias "exporté" - l'alias est visible dans les sous-coquilles.
Et sachez que les alias définis dans un script ne sont pas visibles dans ce script (car les alias sont développés lors du chargement d'un script, pas lorsqu'une ligne est interprétée). Cela peut être résolu en exécutant un autre fichier de script dans le même shell (en utilisant un point).
la source
Je pense que vous pouvez le faire avec des fonctions shell si vous utilisez bash: http://www.cyberciti.biz/faq/linux-unix-pass-argument-to-alias-command/
la source
fonction count () {python -c "pour num dans xrange ($ 1): print num";}
la source
Un alias vide exécutera ses arguments:
la source