别名不在Shell脚本中执行

时间:2015-07-02 10:29:08

标签: linux bash shell unix

在我的bashrc文件中,我有n个别名。但是,如果我通过shell脚本执行, 它不会给出预期的产出。为什么会这样。有什么办法吗? 解决这个问题。

提前致谢。

1 个答案:

答案 0 :(得分:1)

别名(使用alias name=value设置)仅在交互式上下文中使用 ,即。即当用户在命令行上键入内容时。它们从不由脚本执行(除非使用shopt -s expand_aliases显式调整非交互式shell以执行此操作):

#!/bin/bash
alias ttt=date
ttt  # will fail!

获取定义别名的配置脚本不会改变任何相关内容。脚本根本不会执行别名。

要实现您的目标,请将别名重写为shell函数:

#!/bin/bash
ttt() {
  date
}
ttt  # will succeed!

Shell函数可以完全替换别名,但还有一些事情需要了解和考虑:

  1. 您甚至可以导出shell函数,以便子shell也可以使用它们。请使用export -f ttt
  2. Shell函数可以覆盖其他命令,因此它们可能会干扰脚本的行为(与在脚本中从不执行的别名不同)。请记住这一点,以防您计划覆盖cdls
  3. 等内容
  4. 通过将其称为cd,仍然可以访问被覆盖的内置shell(例如builtin cd /my/direc/tory)。
  5. 参数处理与别名完全不同(功能更强大)。
相关问题