我有一个可执行文件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,它工作正常.
我在这里很困惑.哪里出了问题?
从bash手册页:
当shell不是交互式时,别名不会扩展,除非使用
expand_aliasesshell设置shell选项shopt(请参阅shopt下面的SHELL BUILTIN命令下的说明).
换句话说,默认情况下,bash shell脚本中未启用别名.使用脚本运行时bash,它会失败.
您sh似乎默认允许在脚本中使用别名.当您运行脚本时sh,它会成功.
./command.sh碰巧的工作,因为你的家当是畸形的(你缺少!的#!/bin/bash).
别名用于交互式外壳,您在这里需要的是一个函数,例如
#!/bin/bash
function my_command() {
echo ok
}
my_command
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1067 次 |
| 最近记录: |