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.
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 & ;}