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