将rlogin命令转换为别名

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)

我在这里错过了什么?

shx*_*hx2 7

您可以通过运行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)

  • 不要打败自己!;) (2认同)

dev*_*ull 6

tr别名中的管道是无用的.简单地说:

alias rl 'rlogin machine\!:1'
Run Code Online (Sandbox Code Playgroud)

并通过说:

rl 42
Run Code Online (Sandbox Code Playgroud)

应该工作,即应该发布rlogin machine42.

请注意,您需要转义!它以防止shell对其进行解释以进行历史记录扩展.