![如果路径上存在 bash 脚本,则使用它,否则使用可执行文件](https://linux22.com/image/1395049/%E5%A6%82%E6%9E%9C%E8%B7%AF%E5%BE%84%E4%B8%8A%E5%AD%98%E5%9C%A8%20bash%20%E8%84%9A%E6%9C%AC%EF%BC%8C%E5%88%99%E4%BD%BF%E7%94%A8%E5%AE%83%EF%BC%8C%E5%90%A6%E5%88%99%E4%BD%BF%E7%94%A8%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6.png)
如果路径上存在 bash 脚本,我想使用它,否则,我想使用可执行文件。
alias build='xctool.sh'
type -a xctool.sh || alias build='xcodebuild'
build -scheme "${APP_SCHEME}" archive
因此,在此示例中,如果可用,我想使用 xctool.sh 而不是 xcodebuild。否则,我想使用 xcodebuild。
我收到的错误是“build:未找到命令”
我哪里做错了?
答案1
您所描述的内容如果在命令行上运行,效果会非常好,如果您遇到问题,我假设您正在尝试将其作为脚本的一部分执行(提示:这是您想在问题中提到的事情)。
脚本在非交互式 shell 中运行,在这种 shell 中别名不会展开。来自man bash
:
Aliases are not expanded when the shell is not interactive, unless the
expand_aliases shell option is set using `shopt`
因此,您有几个选择。首先,您可以在脚本中激活别名:
#!/usr/bin/env bash
shopt -s expand_aliases
alias build='xctool.sh'
type -a xctool.sh 2>/dev/null || alias build='xcodebuild'
build -scheme "${APP_SCHEME}" archive
或者,您可以使用以下命令完全避免使用别名eval
:
#!/usr/bin/env bash
build='xctool.sh'
type -a xctool.sh 2>/dev/null || build='xcodebuild'
$build -scheme ${APP_SCHEME} archive
答案2
我不知道type
这里应该做什么;但是当我理解你的意思时,这样的事情可能会有所帮助:
[ -x ./xctool.sh ] && alias build='./xctool.sh' || alias build='xcodebuild'
答案3
看一下man test
-e / -f 标志。
也许这样的事情可行:
[ -f xctool.sh ] && xctool.sh || xcodebuild