我想从 csh 切换到 bash,然后我必须使用我使用的命令设置 .bashrc。用参数翻译别名似乎并不像我相信的那样容易。csh:
alias gr 'xmgrace -legend load -nxy \!* -free -noask&'
Run Code Online (Sandbox Code Playgroud)
param\!*
表示命令行中的所有参数;然后我尝试了 bash:
alias gr='xmgrace -legend load -nxy $@ -free -noask&'
alias gr='xmgrace -legend load -nxy $(@) -free -noask&'
Run Code Online (Sandbox Code Playgroud)
但都没有奏效。
另一个问题来自记住当前目录 csh:
alias t 'set t=\`pwd\``;echo $t'
alias tt 'cd $t'
Run Code Online (Sandbox Code Playgroud)
我尝试了很多东西,但没有任何结果。
这不是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
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,foo
最后添加了别名情况下的第一个参数,因此命令foo file.txt
被扩展为:
grep -f "" bar.txt file.txt
Run Code Online (Sandbox Code Playgroud)
而在函数spam
的情况下,命令被正确扩展为:
grep -f file.txt bar.txt
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下,你可以定义一个函数,如:
gr () { xmgrace -legend load -nxy "$@" -free -noask & ;}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22629 次 |
最近记录: |