bash alias com parâmetros [duplicado]

2

Eu gostaria de trocar de csh para bash, então eu tenho que definir o .bashrc com os comandos que eu uso. Traduzir alias com parâmetros parece não ser mais fácil, como eu acreditava. csh:

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

o parâmetro \!* significa todos os parâmetros na linha de comando; Então eu tentei por bash:

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

Mas nem funcionou.

O outro problema vem da memorização do diretório atual csh:

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

Eu tentei muitas coisas, mas sem resultados.

    
por leozizos 26.08.2015 / 18:58

1 resposta

3

Não é assim que bash aliases funcionam, todos os parâmetros psoitional nos bash aliases são indicados no final do comando, em vez do local que você definiu. Para superar isso, você precisa usar as funções bash .

Um exemplo deixará você mais claro:

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

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

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

Como você pode ver, o primeiro argumento no caso do alias foo está sendo adicionado no final, então o comando foo file.txt está sendo expandido para:

grep -f "" bar.txt file.txt

enquanto no caso da função spam o comando está sendo corretamente expandido para:

grep -f file.txt bar.txt

Então, no seu caso, você pode definir uma função como:

gr () { xmgrace -legend load -nxy "$@" -free -noask & ;}
    
por heemayl 26.08.2015 / 21:41