在shell脚本中使用alias
来源:互联网 发布:怎么投诉淘宝员工客服 编辑:程序博客网 时间:2024/06/15 03:04
原文链接:http://www.cnblogs.com/qcly/p/3219780.html
Linux shell有交互式与非交互式两种工作模式。我们日常使用shell输入命令得到结果的方式是交互式的方式,而shell脚本使用的是非交互式方式。
shell提供了alias功能来简化我们的日常操作,使得我们可以为一个复杂的命令取一个简单的名字,从而提高我们的工作效率。在交互式模式下,shell的alias扩展功能是打开的,因此我们可以键入自己定义的alias别名来执行对应的命令。
但是,在非交互式模式下alias扩展功能默认是关闭的,此时仍然可以定义alias别名,但是shell不会将alias别名扩展成对应的命令,而是将alias别名本身当作命令执行,如果shell内置命令和PATH中均没有与alias别名同名的命令,则shell会“抱怨”找不到指定的命令。
那么,有没有办法在非交互式模式下启用alias扩展呢?答案是使用shell内置命令shopt命令来开启alias扩展选项。shopt是shell的内置命令,可以控制shell功能选项的开启和关闭,从而控制shell的行为。shopt的使用方式如下:
shopt -s opt_name Enable (set) opt_name.shopt -u opt_name Disable (unset) opt_name.shopt opt_name Show current status of opt_name.
alias扩展功能的选项名称是expand_aliases,我们可以在交互式模式下查看此选项是否开启:
sw@gentoo ~ $ shopt expand_aliasesexpand_aliases onsw@gentoo ~ $
我们编写一个脚本来验证一下非交互式模式下alias扩展的设置:
#!/bin/bash --loginalias echo_hello="echo Hello!"shopt expand_aliases echo_helloshopt -s expand_aliases shopt expand_aliases echo_hello
脚本执行结果如下:
sw@gentoo ~ $ ./test.sh expand_aliases off./test.sh: line 5: echo_hello: command not foundexpand_aliases onHello!sw@gentoo ~ $
可以看到,在非交互式模式下alias扩展功能默认是关闭的,但是我们可以用shopt来将其开启。
另外,alias别名只在当前shell有效,不能被子shell继承,也不能像环境变量一样export。可以把alias别名定义写在.bashrc文件中,这样如果启动交互式的子shell,则子shell会读取.bashrc,从而得到alias别名定义。但是执行shell脚本时,启动的子shell处于非交互式模式,是不会读取.bashrc的。
不过,如果你一定要让执行shell脚本的子shell读取.bashrc的话,可以给shell脚本第一行的解释器加上参数:
#!/bin/bash --login
还有一个简单的办法让执行脚本的shell读取.bashrc,在脚本中主动source ~/.bashrc即可。
0 0
- 在shell脚本中使用alias
- Shell-alias在Shell脚本中的使用
- bash:alias 只能再交互界面用,不能在shell脚本中使用
- linux中在shell脚本内alias和unalias不可用解决办法
- 在shell脚本中使用ftp telnet
- 在shell脚本中使用sudo
- 8、在Shell脚本中使用函数
- 在Shell脚本中使用窗口
- 在Android.mk编译脚本中使用shell bash命令
- 在shell脚本中,如何写使用for循环
- 在shell脚本中,如何写使用for循环
- 在C程序中使用popen调用shell脚本程序
- 在shell脚本中使用getopts处理参数
- 在gawk中 使用shell脚本中的变量
- 在shell脚本中使用expect实现scp传输问题
- 在shell脚本中使用ls命令的注意事项
- 在shell脚本中调用另一个脚本
- shell脚本中使用MySQL
- 编程修复网页上的错误
- 我的Qt学习之路 --- 1、配置环境及HelloWorld
- C++抽象编程——STL(3)——离散事件模拟与排队问题
- 递归的函数
- [LeetCode] H-Index H篇论文至少有H次引用
- 在shell脚本中使用alias
- (pat)L1-8. 最佳情侣身高差
- 1054. 求平均值 (20) python篇
- 信源编码与信道编码
- 116. Populating Next Right Pointers in Each Node
- spring boot web 模板freemaker篇
- B1045. 快速排序(25)
- Linux中设置粘滞位
- LINUX获取进程已经运行的时间