在Shell中使用alias

       以前在Linux跳机上登录其他服务器(ssh IP),为了方便,把很多服务器的IP和业务名称touch到了用户主目录下,这样方便了好多,每次ls -l 出来下就可以了,然后复制,粘贴就方便了。如下图。

  这样每次复制粘贴还是不是特别方便,所以行能不能输入业务名字,直接就登录了,仍然保持着touch的文件(方便记忆IP进行沟通),首先第一个还是想到的是alias命令。 因此开始着手写一个简单的脚本。把IP和别名对应起来。

   第一步、ls 出来这些touch出来的文件 通过AWK 进行分析 

   第二步、 使用alias 把名字和ssh IP对应起来。

很快搞定shell脚本

#!/bin/sh
#ls -l IP* | awk  '{print $9}' 

ls -l IP* | awk  '{print $9}' >m.list
cat  m.list| awk -F _  'BEGIN {print("#!/bin/sh") ;print("shopt expand_aliases"); print("shopt -s  expand_aliases ")}  { cmd="alias "$3"="ssh "$2""";print(cmd) }  END {print("# end")}' >alias_dat.sh
chmod +x alias_dat.sh
source  /home/dongjunjie/alias_dat.sh

     其实调试这些脚本看着简单,但还是遇到不少坑。 主要有以下

第一、alias 在交互式模式下,shell的alias扩展功能是打开的,因此我们可以键入自己定义的alias别名来执行对应的命令。但是,在非交互式模式下alias扩展功能默认是关闭的,此时仍然可以定义alias别名,但是shell不会将alias别名扩展成对应的命令,而是将alias别名本身当作命令执行,如果shell内置命令和PATH中均没有与alias别名同名的命令,则shell会“抱怨”找不到指定的命令。 因此需要

shopt -s  expand_aliases  打开

第二、expand_aliases 打开之后,执行命令,还是发现没有找到命令。 最后在shell脚本里面执行,发现是OK的,说明alias只在shell中生效了,shell执行完毕之后,有实效了。
因此想办法,把脚本加入.bash_profile 测试OK。
以后终于就可以简单的通过跳机来调了。
--------------------------


参考 打开alias shell模式。 http://www.cnblogs.com/qcly/p/3219780.html


原文地址:https://www.cnblogs.com/xd502djj/p/7308600.html