别名在 Bash 脚本中不起作用

Alias doesn't work inside a Bash script

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

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

我的终端是bash.

当我 运行 它喜欢 ./command.sh 时,它工作正常。

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

当我 运行 它喜欢 /bin/sh ./command.sh 时,它工作正常。

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

别名是为了交互shell,你在这里想要的是一个函数,例如

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

my_command

来自 bash 手册页:

Aliases are not expanded when the shell is not interactive, unless the expand_aliases shell option is set using shopt (see the description of shopt under SHELL BUILTIN COMMANDS below).

换句话说,bash shell 脚本默认不启用别名。当您 运行 带有 bash 的脚本时,它会失败。

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

./command.sh 恰好可以工作,因为您的 shebang 格式不正确(您缺少 #!/bin/bash 中的 !)。