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


这篇文章主要介绍“bashshell自定义函数命令持久化生效问题怎么解决”,在日常操作中,相信很多人在bashshell自定义函数命令持久化生效问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”bashshell自定义函数命令持久化生效问题怎么解决”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    1. 背景

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

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

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

    • $HOME/.bash_profile

    • $HOME/.bashrc

    • $HOME/.bash_login

    • $HOME/.profile

    2.1 /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#Getthealiasesandfunctionsif[-f~/.bashrc];then.~/.bashrcfi#UserspecificenvironmentandstartupprogramsPATH=$PATH:$HOME/.local/bin:$HOME/binexportPATH

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

    3. 在命令行上使用函数

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

    [zoms@chm~]$functiondivem{echo$[$1/$2];}[zoms@chm~]$divem100520

    3.1 在.bashrc 文件中定义函数

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

    3.1.1 直接定义函数

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

    cat.bashrc#.bashrc#Sourceglobaldefinitionsif[-r/etc/bashrc];then./etc/bashrcfifunctionaddem{echo$[$1+$2]}

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

    3.1.2 读取函数文件

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

    cat.bashrc#.bashrc#Sourceglobaldefinitionsif[-r/etc/bashrc];then./etc/bashrcfi./home/rich/libraries/myfuncs

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

    [zoms@chm~]$cat~/.bashrc#.bashrc#Sourceglobaldefinitionsif[-f/etc/bashrc];then./etc/bashrcfi#Umentthefollowinglineifyoudon'tlikesystemctl'sauto-pagingfeature:#exportSYSTEMD_PAGER=#Userspecificaliasesandfunctions./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.shzcm_update(){if[$#-eq0]thenechoParameterexceptionreturn1fiecho$1sudosupervisorctlstop$1;sudodockerstop$1;sudodockerrm$1;sudosupervisorctlupdate$1;sudosupervisorctlstart$1;sleep3;sudosupervisorctlstatus$1echosudosupervisorctlstatus$1}

    4. 验证

    #改造前#通过多条命令重建nms-monitor应用sudosupervisorctlstopnms-test;sudodockerstopnms-test;sudodockerrmnms-test;sudosupervisorctlupdatenms-test;sudosupervisorctlstartnms-test;sleep3;sudosupervisorctlstatusnms-test#改造后zcm_updatenms-test

    到此,关于“bashshell自定义函数命令持久化生效问题怎么解决”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注主机评测网网站,小编会继续努力为大家带来更多实用的文章!


    上一篇:js延迟加载的方式有哪些

    下一篇:Python基础教程之异常处理的方法是什么


    Copyright © 2002-2019 测速网 www.inhv.cn 皖ICP备2023010105号
    测速城市 测速地区 测速街道 网速测试城市 网速测试地区 网速测试街道
    温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!

    热门搜索 城市网站建设 地区网站制作 街道网页设计 大写数字 热点城市 热点地区 热点街道 热点时间 房贷计算器