首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过.bashrc创建bash别名

通过.bashrc创建bash别名
EN

Stack Overflow用户
提问于 2011-09-24 04:50:05
回答 3查看 594关注 0票数 1

作为一名系统管理员,我经常将rdp和ssh放入远程机器中进行管理。

我已经创建了一个文件${SERVER_FILE},每行包含一个条目,表示连接到给定服务器时要使用的主机名和协议。

示例:

代码语言:javascript
运行
复制
...
server1,ssh
winsrv,rdp
...

根据上面的条目,我希望下面的内容是created+evaluated (rdp本身就是我系统上的一个脚本):

代码语言:javascript
运行
复制
alias server1='ssh server1' winsrv='rdp winsrv'

当我将生成的输出剪切并粘贴到alias命令中时,以下代码可以完美地工作:

代码语言:javascript
运行
复制
$ 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'

因此,我将其更改为以下内容,以实际导致创建别名,并得到错误:

代码语言:javascript
运行
复制
$ 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'

建议?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-24 04:55:59

尝试:

代码语言:javascript
运行
复制
 $ eval alias $(sed "s/\(.*\),\(rdp\|ssh\)/\1='\2 \1' /g" ${SERVER_FILE} | tr -d '\n')

这对我很有效。

票数 2
EN

Stack Overflow用户

发布于 2011-09-24 04:58:44

我可以建议使用awk而不是sed来实现更易读的命令吗?

代码语言:javascript
运行
复制
awk 'BEGIN { FS="," 
             format = "%s=\"%s %s\" " }
     $2 ~ /(rdp|ssh)/ { printf format, $1, $2, $1 }' ${SERVER_FILE}
票数 1
EN

Stack Overflow用户

发布于 2011-09-24 04:56:06

嗯,看起来aliasecho对一些反斜杠有不同的解释。诚然,这是一种黑客行为,但我会尝试这样做:

代码语言:javascript
运行
复制
alias $(echo $(sed "s/\(.*\),\(rdp\|ssh\)/\1='\2 \1' /g" ${SERVER_FILE} | tr -d '\n'))

:-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7534685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档