2011-09-23 5 views
1

저는 sysadmin으로 일상적인 rdp 및 ssh를 사용하여 원격 시스템을 관리합니다..bashrc를 통해 bash 별칭 만들기

$ {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' 

조언 :그래서 나는 실제로 별칭이 만들어 내가 에러가 발생되는 원인이로 변경?

답변

2

시도 : 나를 위해

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

작품.

+2

'eval'별칭 $ (sed ...) "는 어떻게됩니까? * 단어 확장 *의 추가 단계가 없으므로 내게 더 튼튼 해 보입니다. 결과를 더 쉽게 이해할 수 있습니다. –

+0

감사합니다.이 트릭을했습니다! 나는 Roland의 인용문을 훌륭한 결과와 통합했다. – Shaun

0

글쎄, aliasecho은 일부 백 슬래시를 다르게 해석합니다. 이것은 틀림없이 해킹,하지만 난이 시도 것 :

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

:-)

+0

안녕하세요, 동일한 오류가 발생합니다. 'alias'의 결과도 동일합니다. – Shaun

1

내가 awk가 대신 훨씬 더 쉽게 읽을 수 명령 나오지도 제안 할 수 있음?

awk 'BEGIN { FS="," 
      format = "%s=\"%s %s\" " } 
    $2 ~ /(rdp|ssh)/ { printf format, $1, $2, $1 }' ${SERVER_FILE} 
관련 문제