如果路径上存在 bash 脚本,则使用它,否则使用可执行文件

如果路径上存在 bash 脚本,则使用它,否则使用可执行文件

如果路径上存在 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

相关内容