我有一个可执行文件command.sh
#/bin/bash
alias my_command='echo ok'
my_command
我的终端是bash。
当我像./command.sh
一样运行时,它运行正常。
当我像/bin/bash ./command.sh
一样运行时,它找不到my_command可执行文件。
当我像/bin/sh ./command.sh
一样运行时,它运行正常。
我在这里很困惑。问题出在哪里?
答案 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