web-dev-qa-db-fra.com

bash alias avec des paramètres

Je voudrais passer de csh à bash, puis je dois définir le .bashrc avec les commandes que j'utilise. Traduire un alias avec des paramètres ne semble pas être plus facile, comme je le croyais. csh:

alias gr 'xmgrace -legend load -nxy \!* -free -noask&'

le paramètre \!* signifie tous les paramètres de la ligne de commande; Alors j'ai essayé pour bash:

alias gr='xmgrace -legend load -nxy $@ -free -noask&'
alias gr='xmgrace -legend load -nxy $(@) -free -noask&'

Mais ni a travaillé.

L'autre problème vient de la mémorisation du répertoire courant csh:

alias t 'set t=\`pwd\``;echo $t'
alias tt 'cd $t'

J'ai essayé beaucoup de choses mais sans aucun résultat.

2
leozizos

Ce n'est pas ainsi que fonctionnent les alias bash, tous les paramètres de position dans les alias bash sont ajoutés à la fin de la commande et non à l'emplacement que vous avez défini. Pour résoudre ce problème, vous devez utiliser les fonctions bash.

Un exemple vous éclairera plus clairement:

$ cat file.txt 
foo
$ cat bar.txt 
foobar
spamegg
$ grep -f file.txt bar.txt 
foobar

$ alias foo='grep -f "$1" bar.txt'  ## Alias 'foo'
$ foo file.txt 
grep: : No such file or directory

$ spam () { grep -f "$1" bar.txt ;}  ## Function 'spam'
$ spam file.txt 
foobar

Comme vous pouvez le constater, le premier argument de l'alias foo est ajouté à la fin, de sorte que la commande foo file.txt est étendue de la manière suivante:

grep -f "" bar.txt file.txt

alors que dans le cas de la fonction spam, la commande est correctement étendue à:

grep -f file.txt bar.txt

Donc, dans votre cas, vous pouvez définir une fonction comme:

gr () { xmgrace -legend load -nxy "$@" -free -noask & ;}
4
heemayl