我想从 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'
我尝试了很多方法但都没有任何结果。
答案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 & ;}