在Bash脚本中引入alias的方法

 更新时间:2021年03月09日 08:38:19   作者:后端技术小屋  
这篇文章主要介绍了在Bash脚本中引入alias的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

alias的使用

在日常开发中,为了提高运维效率,我们会用alias(命令别名)来定义命令的简称。比如在~/.bash_profile中添加:

alias ll='ls -lrt --color'
alias bdebug="go build -gcflags '-N -l'"
alias py3='/usr/bin/python3'

执行source ~/.bash_profile之后,这些alias定义便载入到当前终端环境中,我们可以通过alias <cmd>进行查看

$ alias ll 
ll='ls -lrt --color'

$ alias bdebug
bdebug='go build -gcflags '\''-N -l'\'

在命令行执行alias也能看到预期效果

$ ll 
total 44
-rw-rw-r-- 1 liyang liyang  62 Sep 16 09:38 test.c
-rw-rw-r-- 1 liyang liyang  68 Sep 16 09:38 foo.h
-rw-rw-r-- 1 liyang liyang  74 Sep 16 09:38 foo.c
-rwxrwxr-x 1 liyang liyang 8592 Sep 16 09:44 libfoo.so
-rw-rw-r-- 1 liyang liyang 4347 Sep 16 09:44 o23.s
-rwxrwxr-x 1 liyang liyang 9451 Sep 16 09:45 test

在Bash脚本中引入alias的问题

但是有些时候,我们希望将~/.bash_profile中定义好的alias引入Bash脚本中,以便简化命令。例如

脚本文件test.sh

#!/bin/bash
source ~/.bash_profile
ll

执行test.sh文件却会报错

$ bash test.sh 
test.sh: line 5: ll: command not found

这是因为在Bash中,alias默认是不能引入Bash脚本中的。Bash的官方文档其实更建议你使用function而非alias。那么问题来了,既然我辛辛苦苦写了这么多alias,总不能全部改成function吧,那得多费劲?

幸好,解决方法还是有的.

解决方法

只需要在test.sh中加入一行shopt -s expand_aliases

新的脚本文件

#!/bin/bash

shopt -s expand_aliases
source ~/.bash_profile
ll

执行一下,果然成功了,这是为什么呢?

$ bash test.sh 
total 48
-rw-rw-r-- 1 liyang liyang  62 Sep 16 09:38 test.c
-rw-rw-r-- 1 liyang liyang  68 Sep 16 09:38 foo.h
-rw-rw-r-- 1 liyang liyang  74 Sep 16 09:38 foo.c
-rwxrwxr-x 1 liyang liyang 8592 Sep 16 09:44 libfoo.so
-rw-rw-r-- 1 liyang liyang 4347 Sep 16 09:44 o23.s
-rwxrwxr-x 1 liyang liyang 9451 Sep 16 09:45 test
-rw-rw-r-- 1 liyang liyang  64 Mar 8 21:33 test.sh

关键在于shopt -s expand_aliases这句话,shopt是一个命令,使用它可以控制一些shell相关的开关:expand_aliases就是其中一个,当它被开启之后,Bash脚本中的所有命令别名alias都会被展开。

expand_aliases
If set, aliases are expanded as described below under Aliases, Aliases. This option is enabled by default for interactive shells.

总结

  • alias命令可帮助我们自定义命令别名,简化运维操作
  • 缺省情况下无法将终端环境中的alias引入到Bash脚本中
  • 通过shopt -s expand_aliases,可以解决上述问题。

参考

https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html

到此这篇关于在Bash脚本中引入alias的方法的文章就介绍到这了,更多相关Bash脚本引入alias内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux中删除文件内空行的4种方法

    Linux中删除文件内空行的4种方法

    这篇文章主要介绍了Linux中删除文件内空行的4种方法,需要的朋友可以参考下
    2014-06-06
  • shell实现自动备份mysql、整站数据的两个脚本分享

    shell实现自动备份mysql、整站数据的两个脚本分享

    这篇文章主要介绍了shell实现自动备份mysql、整站数据的两个脚本分享,使用了cron实现实现定时备份,并会自动删除N天前的备份,以及自动FTP上传到别的服务器,需要的朋友可以参考下
    2014-06-06
  • 一个用了统计CPU 内存 硬盘 使用率的shell脚本

    一个用了统计CPU 内存 硬盘 使用率的shell脚本

    一个统计 CPU 内存 硬盘 使用率的shell脚本,供大家学习参考
    2013-02-02
  • Shell脚本运行中的停止方法实现

    Shell脚本运行中的停止方法实现

    Linux系统Shell中提交了一个脚本,但是需要停止这个进程,如何处理?本文就来详细的介绍一下,感兴趣的可以了解一下
    2021-11-11
  • 执行Shell脚本的4种方法及区别介绍

    执行Shell脚本的4种方法及区别介绍

    这篇文章主要介绍了执行Shell脚本的4种方法及区别介绍,本文讲解了相对路径方式、绝对路径方式、bash命令调用、相对或绝对方式以及说下几种方式的区别,需要的朋友可以参考下
    2015-05-05
  • shell脚本中 /dev/null 的用法小结

    shell脚本中 /dev/null 的用法小结

    /dev/null 通常被用于丢弃不需要的输出流,或作为用于输入流的空文件,这些操作通常由重定向完成,任何你想丢弃的数据都可以写入其中,本文重点给大家介绍shell脚本中 /dev/null 的用法小结,感兴趣的朋友一起看看吧
    2021-09-09
  • 通过短信发送LOG归类号码发送情况的shell脚本

    通过短信发送LOG归类号码发送情况的shell脚本

    通过短信发送LOG归类号码发送情况的shell脚本,有需要的朋友可以参考下
    2013-02-02
  • Shell逐行读取文件的4种方法

    Shell逐行读取文件的4种方法

    这篇文章主要介绍了Shell逐行读取文件的4种方法,本文介绍了while循环法、重定向法、管道法、文件描述符法等一些方法,需要的朋友可以参考下
    2014-12-12
  • Linux文件名修改方法大全

    Linux文件名修改方法大全

    在Linux系统中,文件名修改是一个常见且重要的操作,文件名修改可以更好地管理文件和文件夹,使其更具可读性和有序性,本文将介绍三种在Linux系统下常用的文件名修改方法,需要的朋友可以参考下
    2025-03-03
  • linux find命令将查找到的文件批量删除方法

    linux find命令将查找到的文件批量删除方法

    这篇文章主要介绍了linux find命令将查找到的文件批量删除,文中给大家补充介绍了Linux中find三种删除方式,常用于crontab定时任务和shell脚本,需要的朋友可以参考下
    2022-12-12

最新评论