Псевдоним bash с параметрами
Я хотел бы переключиться с csh на bash, затем я должен установить.bashrc с помощью команд, которые я использую. Переводить псевдоним с параметрами, кажется, не так просто, как я полагал. CSH:
alias gr 'xmgrace -legend load -nxy \!* -free -noask&'
парам \!*
означает все параметры в командной строке; Затем я попытался для Баш:
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'
Я много чего перепробовал, но безрезультатно.
1 ответ
Это не так bash
псевдонимы работают, все позиционные параметры в bash
псевдонимы добавляются в конце команды, а не в месте, которое вы определили. Чтобы преодолеть это, вы должны использовать 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 & ;}