Pour le script bash, je peux utiliser "$@"
pour accéder aux arguments. Quel est l'équivalent lorsque j'utilise un alias?
64
Les alias sont comme des commandes en ce sens que tous leurs arguments sont passés en argument au programme qu'ils alias. Par exemple, si vous deviez alias ls
à ls -la
, puis en tapant ls foo bar
serait vraiment exécuter ls -la foo bar
sur la ligne de commande.
Si vous voulez avoir un contrôle réel sur la façon dont les arguments sont interprétés, vous pouvez écrire une fonction comme ceci:
my_program_wrapper() {
local first_arg="$1" \
second_arg="$2"
shift 2 # get rid of the first two arguments
# ...
/path/to/my_program "$@"
}
sh
sont définiesmy_program_wrapper() { ...; }
. Bash gère le mot clé,function
mais pourquoi ne pas utiliser ce qui est plus portable?Alias solution
Si vous êtes vraiment contre l'utilisation d'une fonction en tant que telle, vous pouvez utiliser:
Vous pouvez remplacer
$@
par$1
si vous ne voulez que le premier argument.Explication
Cela crée une fonction temporaire
f
, à laquelle sont passés les arguments.Les arguments d'alias ne sont passés qu'à la fin. Notez que
f
s'appelle tout à la fin de l'alias.Le
unset -f
supprime la définition de la fonction car l'alias est exécuté afin qu'il ne reste pas après.la source
wrap_args x y z
me donne: bash: erreur de syntaxe près du jeton inattendu `('f
aliasé. Une fois que je suis imparti,f
cela fonctionne bien. L'ancien problème de collision de noms.command type f
:)Pour ajouter aux réponses actuelles, il est important de comprendre le fonctionnement des alias: tous les paramètres que vous tapez après une commande avec alias seront utilisés à la fin. Il n'y a donc aucun moyen d'utiliser alias pour deux commandes (connectées ou non), à partir desquelles la première doit interpréter les paramètres. Pour être clair, voici un exemple de quelque chose qui ne fonctionnerait pas comme prévu:
(un exemple inspiré de cette question ), il utilisera toujours la sortie de
ls -l
performé dans le répertoire courant et fera un grep sur celui-ci - donc, utiliserlsswp / tmp /
serait équivalent à
ls -l | grep swp /tmp/
et nonls -l /tmp/ | grep swp
.Dans tous les cas où les arguments doivent être utilisés quelque part au milieu, il faut utiliser un à la
function
place dealias
.la source
Vous n'avez rien à faire, en fait; les alias le font automatiquement. Par exemple:
Vous verrez la première page de foo.txt et quitterez
less
à EOF (-e), les recherches seront insensibles à la casse (-i), etc.la source
Je réponds pour csh:
Oui, vous pouvez utiliser les paramètres dans les alias et, à la différence de ce qui a été dit ci-dessus, vous pouvez vous y référer n'importe où dans la définition d'alias, pas seulement à la fin.
Exemple pour tar-gz -ing quelque chose:
, où
!:1
et!:2
sont les paramètres que vous allez fournir lors de l’appel de votre alias.Exemple d'utilisation:
Ce qui signifie en réalité que vous avez utilisé deux paramètres que vous avez insérés à des emplacements arbitraires de la commande tar, faisant de tout cela un alias.
tgz
la source