2013-12-19 3 views
4

Я работаю на нескольких машинах и нуждаюсь в удаленном подключении к ним. Я хочу иметь псевдоним, который может упростить мою команду rlogin.преобразование команды 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 

Что мне здесь не хватает?

+0

Не уверен, что вам не хватает пробелов между 'inmodel' и' $ 1'? –

+0

результат такой же ошибки, когда я делаю alias rl rlogin 'echo machine $ 1 | tr -d '' ' –

+0

Хорошо, проблема может быть' $ 1'. Для псевдонимов синтаксис для первого аргумента представляется '!: 1'. Возможно, вам придется сбежать от него в '\ !: 1'. –

ответ

7

Вы можете легко увидеть псевдоним не определен, как предполагалось, запустив 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 " "` 
+0

Спасибо! работает на меня. Хотя вы сначала ответили на него, а также объяснили мои ошибки, но решение @devnull действительно прост, поэтому я немного смущен, что можно принять. Я поддержал оба ответа. Еще раз спасибо. –

+2

не бить себя над ним! ;) – shx2

6

tr трубопровода в псевдониме бесполезно. Просто говоря:

alias rl 'rlogin machine\!:1' 

и ссылающегося на него, говоря:

rl 42 

должны работать, то есть должен выдать rlogin machine42.

Обратите внимание, что вам необходимо избежать !, чтобы предотвратить его интерпретацию оболочкой для расширения истории.

Смежные вопросы