我的编程空间,编程开发者的网络收藏夹
学习永远不晚

bash shell 自定义函数命令持久化生效问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

bash shell 自定义函数命令持久化生效问题

目录
  • 1. 背景
  • 2. 登陆shell时读取命令的流程
    • 2.1 /etc/profile
    • 2.2 $HOME目录下的启动文件流程
  • 3. 在命令行上使用函数
    • 3.1 在.bashrc 文件中定义函数
      • 3.1.1 直接定义函数
      • 3.1.2 读取函数文件
  • 4. 验证

    1. 背景

    每次登陆shell 遇到需要敲一行命令来查看一个问题或者升级一个应用时就感觉很麻烦,可以考虑将函数放到特定的位置,这样每次登陆shell时就会重新载入。

    2. 登陆shell时读取命令的流程

    当你登录linux系统时,bash shell会作为登录shell启动。登录shell会从5个不同的启动文件里读取命令:

    • /etc/profile
    • $HOME/.bash_profile
    • $HOME/.bashrc
    • $HOME/.bash_login
    • $HOME/.profile

    /etc/profile文件是系统上默认的bash shell的主启动文件。系统上的每个用户登录时都会执行这个启动文件。
    另外4个启动文件是针对用户的,可根据个人需求定制。

    2.1 /etc/profile

    /etc/profile文件是bash shell默认的的主启动文件。只要你登录了Linux系统,bash就会执行
    /etc/profile启动文件中的命令

    2.2 $HOME目录下的启动文件流程

    剩下的启动文件都起着同一个作用:提供一个用户专属的启动文件来定义该用户所用到的环境变量。大多数Linux发行版只用这四个启动文件中的一到两个:

    • $HOME/.bash_profile
    • $HOME/.bashrc
    • $HOME/.bash_login
    • $HOME/.profile

    注意,这四个文件都以点号开头,这说明它们是隐藏文件(不会在通常的ls命令输出列表中
    出现)。它们位于用户的HOME目录下,所以每个用户都可以编辑这些文件并添加自己的环境变
    量,这些环境变量会在每次启动bash shell会话时生效

    shell会按照按照下列顺序,运行第一个被找到的文件,余下的则被忽略:

    • $HOME/.bash_profile
    • $HOME/.bash_login
    • $HOME/.profile

    注意,这个列表中并没有$HOME/.bashrc文件。这是因为该文件通常通过其他文件运行的。

    .bash_profile启动文件会先去检查HOME目录中是不是还有一个叫.bashrc的启动文件。如果有的话,会先执行启动文件里面的命令。

    [zoms@chm ~]$ cat ~/.bash_profile
    # .bash_profile
    
    # Get the aliases and functions
    if [ -f ~/.bashrc ]; then
            . ~/.bashrc
    fi
    
    # User specific environment and startup programs
    
    PATH=$PATH:$HOME/.local/bin:$HOME/bin
    
    export PATH

    到这来可以看到 .bashrc 是如何引入启动的。

    3. 在命令行上使用函数

    在命令行上创建函数
    通过单行方式创建函数

    [zoms@chm ~]$ function divem { echo $[ $1 / $2 ]; }
    [zoms@chm ~]$ divem 100 5
    20

    3.1 在.bashrc 文件中定义函数

    在命令行上直接定义shell函数的明显缺点是退出shell时,函数就消失了。对于复杂的函数来说,这可是个麻烦事。
    一个非常简单的方法是将函数定义在一个特定的位置,这个位置在每次启动一个新shell的时候,都会由shell重新载入。
    最佳地点就是.bashrc文件。bash shell在每次启动时都会在主目录下查找这个文件,不管是交互式shell还是从现有shell中启动的新shell。

    3.1.1 直接定义函数

    可以直接在主目录下的.bashrc文件中定义函数。许多Linux发行版已经在.bashrc文件中定义了一些东西,所以注意不要误删了。把你写的函数放在文件末尾就行了。这里有个例子。

     cat .bashrc 
    # .bashrc 
    # Source global definitions 
    if [ -r /etc/bashrc ]; then 
     . /etc/bashrc 
    fi 
    function addem { 
     echo $[ $1 + $2 ] 
    } 

    该函数会在下次启动新bash shell时生效。随后你就能在系统上任意地方使用这个函数了。

    3.1.2 读取函数文件

    只要是在shell脚本中,都可以用source命令(或者它的别名点操作符)将库文件中的函数添加到你的.bashrc脚本中。

     cat .bashrc 
    # .bashrc 
    # Source global definitions 
    if [ -r /etc/bashrc ]; then 
     . /etc/bashrc 
    fi 
    . /home/rich/libraries/myfuncs 

    还可以在当前用户下的.bashrc 文件添加自定义别名和函数

    [zoms@chm ~]$ cat ~/.bashrc
    # .bashrc
    
    # Source global definitions
    if [ -f /etc/bashrc ]; then
            . /etc/bashrc
    fi
    
    # Uncomment the following line if you don't like systemctl's auto-paging feature:
    # export SYSTEMD_PAGER=
    
    # User specific aliases and functions
    . /home/zoms/shell/zcm_update.sh

    注意:source命令有个快捷的别名,称作点操作符(dot operator)。要在shell脚本中运行zcm_update库文件,只需添加下面这行:
    . /home/zoms/shell/zcm_update.sh

    zcm_update 可以定义参数传参

    [zoms@chm ~]$ cat  /home/zoms/shell/zcm_update.sh
    zcm_update(){
    
     if [ $# -eq 0  ]
     then
       echo Parameter exception
       return 1
     fi
     echo $1
     sudo supervisorctl stop $1;sudo docker stop $1;sudo docker rm $1;sudo supervisorctl
    

    4. 验证

    # 改造前 
    # 通过多条命令重建nms-monitor应用
    sudo supervisorctl stop nms-test;sudo docker stop nms-test;sudo docker rm nms-test;sudo supervisorctl update nms-test;sudo supervisorctl start nms-test;sleep 3;sudo supervisorctl status nms-test
    # 改造后
    zcm_update nms-test

    到此这篇关于bash shell 自定义函数命令持久化生效的文章就介绍到这了,更多相关bash shell 自定义函数命令内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    bash shell 自定义函数命令持久化生效问题

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    bash shell 自定义函数命令持久化生效问题

    这篇文章主要介绍了bash shell 自定义函数命令持久化生效,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-14

    bash shell 自定义函数命令持久化生效问题

    目录1. 背景2. 登陆shell时读取命令的流程2.1 /etc/profile2.2 $HOME目录下的启动文件流程3. 在命令行上使用函数3.1 在.bashrc 文件中定义函数3.1.1 直接定义函数3.1.2 读取函数文件4. 验
    2023-03-31

    bash shell自定义函数命令持久化生效问题怎么解决

    这篇文章主要介绍“bash shell自定义函数命令持久化生效问题怎么解决”,在日常操作中,相信很多人在bash shell自定义函数命令持久化生效问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”b
    2023-07-05

    编程热搜

    目录