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

 更新时间:2023年03月31日 17:08:51   作者:独步秋风  
这篇文章主要介绍了bash shell 自定义函数命令持久化生效,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

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 update $1;sudo supervisorctl start $1;sleep 3;sudo supervisorctl status $1
 echo sudo supervisorctl status $1
}

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 自定义函数命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • shell脚本 自动创建用户详解及实例代码

    shell脚本 自动创建用户详解及实例代码

    这篇文章主要介绍了shell脚本 自动创建用户详解及实例代码的相关资料,需要的朋友可以参考下
    2017-03-03
  • 在Linux中复制文件夹的命令详解

    在Linux中复制文件夹的命令详解

    这篇文章给大家介绍了Linux的基础操作,如何在 Linux 中复制文件夹,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-12-12
  • rm -rf之后磁盘空间没有释放的解决方法

    rm -rf之后磁盘空间没有释放的解决方法

    本文主要介绍了rm -rf之后磁盘空间没有释放的解决方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • 三分钟学会Linux基本指令

    三分钟学会Linux基本指令

    本文小马将把Linux一般比较常见的指令给大家一一列举出来,为了大家忘记某些指令后,可以方便查询记忆,再次小马建议,Linux指令并不需要去特别花时间专门记忆,只需要多进行操作实现就行,这篇文章主要介绍了Linux基本指令,需要的朋友可以参考下
    2022-12-12
  • shell中删除文件中重复行的方法

    shell中删除文件中重复行的方法

    这篇文章主要介绍了shell中删除文件中重复行的方法,需要的朋友可以参考下
    2014-03-03
  • linux下mysql如何自动备份shell脚本

    linux下mysql如何自动备份shell脚本

    对任何一个已经上线的网站站点来说,数据备份都是必须的。无论版本更新还是服务器迁移,备份数据的重要性不言而喻。人工备份数据的方式不单耗费大量时间和精力,还灰常不专业。下面小编给大家分享linux下mysql自动备份shell脚本,需要的朋友可以参考下
    2015-09-09
  • linux shell中单引号、双引号、反引号、反斜杠的区别

    linux shell中单引号、双引号、反引号、反斜杠的区别

    shell可以识别4种不同类型的引字符号: 单引号字符' 双引号字符" 反斜杠字符\ 反引号字符`的区别,学习shell编程的朋友可以看下
    2013-01-01
  • linux数据库备份并通过ftp上传脚本分享

    linux数据库备份并通过ftp上传脚本分享

    这篇文章主要介绍了linux数据库备份并通过ftp上传脚本,脚本还可以备份网站,需要的朋友可以参考下
    2014-03-03
  • shell耗时计算的实现

    shell耗时计算的实现

    本文主要介绍了shell耗时计算的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Linux下自动删除过期备份和自动异地备份的脚本

    Linux下自动删除过期备份和自动异地备份的脚本

    这篇文章主要介绍了Linux下自动删除过期备份和自动异地备份,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09

最新评论