首页 > 解决方案 > 执行 sh 函数

问题描述

这里的一个常用程序经常在 shell 脚本的末尾调用,我们使用它exec来跳过隐式fork并防止sh-process 等待命令完成:

...
exec mycommand
# Unreached

然而,最近,我们在命令周围实现了一个包装函数,以便在其中包含一些通用参数:

...
function mycommand () {
    command mycommand -foo -bar "$@"
}

代码调用exec mycommand继续调用实际程序而不是调用函数,因此我们不得不将其替换为mycommand.

但是现在调用shell等待mycommand完成......

将函数更改为always exec mycommand是不可接受的,因为它并不总是脚本中的最后一个命令。经常,但并非总是如此。

我们是如何获得两者的:一个包装函数exec在适当时无需分叉的程序能力?创建一个单独的函数 ( exec_mycommand) 看起来很丑...

标签: bashfunctionshexec

解决方案


您可以将 exec 放在函数之后,而不是放在函数前面。

function mycommand () {
    if [ "$1" = exec ]; then
        shift
        exec command mycommand -foo -bar "$@"
    else
        command mycommand -foo -bar "$@"
    fi
}

然后在主体中放置mycommand execmycommand


推荐阅读