Создание псевдонимов bash через .bashrc - PullRequest
1 голос
/ 24 сентября 2011

Как системный администратор я обычно выполняю rdp и ssh на удаленных машинах для администрирования.

Я создал файл $ {SERVER_FILE}, содержащий одну запись в каждой строке с указанием имени хоста и протокола для использования при подключении к данному серверу.

Пример:

...
server1,ssh
winsrv,rdp
...

Учитывая приведенные выше записи, я хочу, чтобы следующее было создано + оценено (rdp сам по себе является скриптом в моей системе):

alias server1='ssh server1' winsrv='rdp winsrv'

Следующий код, когда я вырезал и вставил полученный результат в команду alias, работает безупречно:

$ echo $(sed "s/\(.*\),\(rdp\|ssh\)/\1='\2 \1' /g" ${SERVER_FILE} | tr -d '\n')
server1='ssh server1' winsrv='rdp winsrv'

$ alias server1='ssh server1' winsrv='rdp winsrv'

$ alias
alias server1='ssh server1'
alias winsrv='rdp winsrv'

ТАК Я изменяю его на это, чтобы фактически создать псевдонимы, и я получаю ошибки:

$ alias $(sed "s/\(.*\),\(rdp\|ssh\)/\1='\2 \1' /g" ${SERVER_FILE} | tr -d '\n')
bash: alias: server1': not found
bash: alias: winsrv': not found

$ alias 
alias server1=''\''ssh'
alias winsrv=''\''rdp'

Рекомендации

Ответы [ 3 ]

2 голосов
/ 24 сентября 2011

Попробуйте:

 $ eval alias $(sed "s/\(.*\),\(rdp\|ssh\)/\1='\2 \1' /g" ${SERVER_FILE} | tr -d '\n')

У меня работает.

1 голос
/ 24 сентября 2011

Могу ли я предложить awk вместо sed для гораздо более удобочитаемой команды?

awk 'BEGIN { FS="," 
             format = "%s=\"%s %s\" " }
     $2 ~ /(rdp|ssh)/ { printf format, $1, $2, $1 }' ${SERVER_FILE}
0 голосов
/ 24 сентября 2011

Ну, похоже, alias и echo по-разному интерпретируют некоторые обратные слэши.Это по общему признанию взломать, но я бы попробовал это:

alias $(echo $(sed "s/\(.*\),\(rdp\|ssh\)/\1='\2 \1' /g" ${SERVER_FILE} | tr -d '\n'))

: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...