псевдоним bash с параметрами [дубликат]

На этот вопрос уже есть ответ здесь:

Я хотел бы переключиться с csh на bash, тогда мне нужно установить .bashrc с командами, которые я использую. Перевод псевдонима с параметрами кажется не таким простым, как я думал. csh:

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

параметр \! * означает все параметры в командной строке; Затем я попробовал использовать bash:

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

Но ни один из них не работал.

Другая проблема возникает из-за запоминания текущего каталога csh:

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

Я много чего пробовал, но безрезультатно.

3
задан 26 August 2015 в 22:51

1 ответ

Это не путь bash работа псевдонимов, все psoitional параметры в bash, псевдонимы являются appened в конце команды, а не места, которое Вы определили. Для преобладания над ним, необходимо использовать bash функции.

пример сделает Вас более ясными:

$ 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

, Как Вы видите, поскольку первый аргумент в случае псевдонима foo добавляется в конце, таким образом, команда foo file.txt расширяется до:

grep -f "" bar.txt file.txt

, в то время как в случае функции spam команда правильно расширяется до:

grep -f file.txt bar.txt

Так в Вашем случае, можно определить функцию как:

gr () { xmgrace -legend load -nxy "$@" -free -noask & ;}
0
ответ дан 27 August 2015 в 08:51

Другие вопросы по тегам:

Похожие вопросы: