别名在Bash脚本中不起作用

时间:2015-05-08 18:55:58

标签: bash sh alias

我有一个可执行文件command.sh

#/bin/bash
alias my_command='echo ok'
my_command

我的终端是bash。

当我像./command.sh一样运行时,它运行正常。

当我像/bin/bash ./command.sh一样运行时,它找不到my_command可执行文件。

当我像/bin/sh ./command.sh一样运行时,它运行正常。

我在这里很困惑。问题出在哪里?

2 个答案:

答案 0 :(得分:8)

来自bash手册页:

  

如果shell不是交互式的,则不会展开别名,除非使用expand_aliases设置shopt shell选项(请参阅           SHELL BUILTIN COMMANDS 下的shopt说明。

换句话说,默认情况下,bash shell脚本中未启用别名。使用bash运行脚本时,它会失败。

您的sh似乎默认允许在脚本中使用别名。当您使用sh运行脚本时,它会成功。

./command.sh恰好有效,因为你的shebang格式不正确(你错过了!中的#!/bin/bash)。

答案 1 :(得分:3)

别名是交互式shell,你想要的是一个函数,例如

#!/bin/bash
function my_command() {
    echo ok
}

my_command