shell 如何定义在命令不可用时调用的回退命令

gupuwyp2  于 2022-11-16  发布在  Shell
关注(0)|答案(2)|浏览(110)

我想在一个命令行中调用taskhttps://taskfile.dev/)。但是在一些系统上,任务被安装为task,而在另一些系统上,任务被安装为go-task。在我的系统上,我在shell task=go-task中定义了一个别名。
还有一些简明地语法:

task --help

可能类似于默认变量值${task:-go-task} --help
这在podmandocker等情况下会很有帮助。

编辑:

if command -v task &> /dev/null ; then task=task ; else task=go-task ; fi && $task --help

不起作用,因为task是一个别名。在本例中,我得到bash: task: command not found...

nfeuvbwi

nfeuvbwi1#

尝试使用:

# Check command

command -v main-command > /dev/null && CMD=main-command || CMD=fallback-command

# Execute command

${CMD}
jyztefdp

jyztefdp2#

请尝试以下功能(而不是别名):

task(){
    declare -a cmds=($FUNCNAME go-task) cmd c
    for c in "${cmds[@]}"; do
        type -f "$c" &> /dev/null && { cmd="$c"; break; }
    done
    test -v cmd && command $cmd "$@" ||
        { echo "bash: commands [${cmds[*]}] not found."; return 127; }
}

相关问题