zoukankan      html  css  js  c++  java
  • 在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


  • 相关阅读:
    mysql常用基本命令
    mysql8.0.13下载与安装图文教程
    k8s ingress 增加跨域配置
    Jenkins 备份恢复插件 thinBackup 使用
    k8s HA master 节点宕机修复
    nginx 跨域问题解决
    mongodb 3.4.24 主从复制
    k8s 线上安装 jenkins并结合 jenkinsfile 实现 helm 自动化部署
    k8s helm 运用与自建helm仓库chartmuseum
    centos6 源码安装 unzip
  • 原文地址:https://www.cnblogs.com/xd502djj/p/7308600.html
Copyright © 2011-2022 走看看