我在多台机器上工作,需要远程登录.我想有一个别名,可以使我的rlogin命令更简单.
所以,我想将以下命令转换为别名:
rlogin `echo "machine $num" | tr -d ' '`
我试着在我的.cshrc文件中写这个:
alias rl rlogin `echo machine$1| tr -d ' '`
当我做 rl 13
它说 :
usage: rlogin [ -8EL] [-e char] [ -l username ] host
我在这里错过了什么?
您可以通过运行alias rl
以下命令轻松查看别名未按预期定义:
% alias rl rlogin `echo machine$1| tr -d ' '` % alias rl rlogin machine
定义别名的方式有两个问题.
首先,在定义这样的别名时:
alias rl rlogin `...`
在定义...
别名时评估命令,而您需要将评估推迟到使用它的时间.正确的方法是将所有内容封装在单引号中,例如
'`...`'
(另外,我们需要用双引号替换内部单引号,以免与外部单引号冲突).
其次,你需要使用\!*
而不是$1
.
所以你得到:
% alias rl rlogin '`echo machine\!* | tr -d " "`' % alias rl rlogin `echo machine!* | tr -d " "`
tr
别名中的管道是无用的.简单地说:
alias rl 'rlogin machine\!:1'
并通过说:
rl 42
应该工作,即应该发布rlogin machine42
.
请注意,您需要转义!
它以防止shell对其进行解释以进行历史记录扩展.