如何在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
推荐阅读
- 一文读懂clickhouse集群监控
- 30分钟入门Vim
- 30分钟入门GDB
- STL源码分析--vector
- zookeeper client原理总结
- redis实现分布式锁
- 推荐几个好用的效率神器
- C/C++关键字之restrict
- 现代C++之右值语义
- Python乱码九问
- Linux Shell脚本攻略读书笔记
更多精彩内容,请扫码关注微信公众号:后端技术小屋。如果觉得文章对你有帮助的话,请多多分享、转发、在看。
如何在Bash脚本中引入alias的更多相关文章
- grep 查找bash脚本中的注释代码
出于安全性的考虑,不建议在bash脚本中注释掉不使用的代码.也就是说如果某段代码不使用了,那么应该删除掉,而不是简单地注释掉.假如你突然意识到这一点,而以前并没有遵从这个原则,现在需要找出脚本中的注释 ...
- 转:如何在 LoadRunner 脚本中做关联 (Correlation)
如何在 LoadRunner 脚本中做关联 (Correlation) 当录制脚本时,VuGen会拦截client端(浏览器)与server端(网站服务器)之间的对话,并且通通记录下来,产生脚本.在V ...
- 如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样)
如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样) python标准库中的subprocess可以解决这个问题. from subprocess ...
- 技术分享:如何在PowerShell脚本中嵌入EXE文件
技术分享:如何在PowerShell脚本中嵌入EXE文件 我在尝试解决一个问题,即在客户端攻击中只使用纯 PowerShell 脚本作为攻击负荷.使用 PowerShell 运行恶意代码具有很多优点, ...
- 2.Jmeter 如何在jsr223 脚本中停止测试任务
Jmeter 如何在jsr223 脚本中停止测试任务 在可以直接引用ctx的变量的processor中可以执行如下脚本即可. (例如jsr223 postprocessor中) ctx.getEngi ...
- Linux shell 脚本中使用 alias 定义的别名
https://www.cnblogs.com/chenjo/p/11145021.html 核心知识点: 用 shopt 开启和关闭 alias 扩展 交互模式下alias 扩展默认是开启的,脚本模 ...
- 在shell脚本中使用alias
Linux shell有交互式与非交互式两种工作模式.我们日常使用shell输入命令得到结果的方式是交互式的方式,而shell脚本使用的是非交互式方式. shell提供了alias功能来简化我们的 ...
- 如何在batch脚本中嵌入python代码
老板叫我帮他测一个命令在windows下消耗的时间,因为没有装windows那个啥工具包,没有timeit那个命令,于是想自己写一个,原理很简单: REM timeit.bat echo %TIME% ...
- bash 脚本中分号的作用
在Linux bash shell中,语句中的分号一般用作代码块标识 1.单行语句一般要用到分号来区分代码块.比如: weblogic@pmtest:/$if [ "$PS1" ] ...
随机推荐
- 手动编译Selenium源码
起因 Selenium ChromeDriver和Chrome升级到最新v81版本,同时需要将Selenium3.3.1升级到3.141.59. Selenium本身不支持https,所以修改源码用于 ...
- 【转】Docker 核心技术与实现原理
转自:https://draveness.me/docker 提到虚拟化技术,我们首先想到的一定是 Docker,经过四年的快速发展 Docker 已经成为了很多公司的标配,也不再是一个只能在开发阶段 ...
- Windows 10 & git & bash
Windows 10 & git & bash If you are on Windows, we recommend downloading Git for Windows and ...
- Linked List & List Node All In One
Linked List & List Node All In One 链表 & 节点 链表类型 单链表 双链表 环形链表 / 循环链表 Singly Linked List (Uni- ...
- jest & code testing
jest jest & code testing https://jestjs.io/zh-Hans/ 24.9 https://jestjs.io/docs/zh-Hans/getting- ...
- css skeleton loading & skeleton components
css skeleton loading css & :empty See the Pen Skeleton Screen with CSS by xgqfrms (@xgqfrms) on ...
- project generators & project scaffold
project generators & project scaffold how to write a node cli & Project Scaffold https://www ...
- 比特币大涨之际,VAST空投火爆来袭!
昨天特斯拉宣布投资了15亿美元的比特币,消息一出,币圈沸腾,比特币瞬间拉升,突破4万美元关口,现价46000美元!大涨20%,又刷新历史新高! 另外NGK项目热度最高的BGV也是不断刷新历史新高,数据 ...
- 为什么10月上线的NGK Global即将燎原资本市场
近日据社区透露,NGK Global将在10月全面启动,数据公开透明,人人可以参与运营监管. 现在,区块链经济已经处于爆发前夜.金融行业的探索领先一筹,而其他行业的应用正在快速展开.区块链行业应用头部 ...
- HQYJ嵌入式学习笔记——C语言复习day2
1.计算机的数值表示 数值类型和非数值类型 二进制 0,1 (0b1001) 八进制 0~7 (0146) 十进制 0~9 十六进制 0~f (0x3f) 八进制转二进制-->一位八进制数换 ...
