别名在 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
中的 !
)。
我有一个可执行文件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 usingshopt
(see the description ofshopt
under SHELL BUILTIN COMMANDS below).
换句话说,bash shell 脚本默认不启用别名。当您 运行 带有 bash
的脚本时,它会失败。
您的 sh
似乎默认允许在脚本中使用别名。当您 运行 带有 sh
的脚本时,它会成功。
./command.sh
恰好可以工作,因为您的 shebang 格式不正确(您缺少 #!/bin/bash
中的 !
)。