别名在Bash脚本中不起作用

Igo*_*tov 3 bash alias sh

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

#/bin/bash
alias my_command='echo ok'
my_command
Run Code Online (Sandbox Code Playgroud)

我的终端是bash.

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

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

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

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

tha*_*guy 8

bash手册页:

当shell不是交互式时,别名不会扩展,除非使用expand_aliasesshell设置shell选项shopt(请参阅shopt下面的SHELL BUILTIN命令下的说明).

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

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

./command.sh碰巧的工作,因为你的家当是畸形的(你缺少!#!/bin/bash).

  • 后面的同一部分:"对于几乎所有目的,shell函数比别名更受欢迎." 我从未意识到别名不会在非交互式shell中扩展.这是避免它们的另一个原因.Bash别名相对于csh/tcsh别名似乎相当严重.另一方面,csh/tcsh没有功能. (3认同)

wic*_*ich 5

别名用于交互式外壳,您在这里需要的是一个函数,例如

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

my_command
Run Code Online (Sandbox Code Playgroud)