bash - 执行 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
) 看起来很丑...
解决方案
您可以将 exec 放在函数之后,而不是放在函数前面。
function mycommand () {
if [ "$1" = exec ]; then
shift
exec command mycommand -foo -bar "$@"
else
command mycommand -foo -bar "$@"
fi
}
然后在主体中放置mycommand exec
或mycommand
。
推荐阅读
- tfs - 将史诗转移到另一个项目
- python - 在 Python 中从较大的方阵 (n,n) 复制较小的方阵 (m,m)
- reactjs - 将 React Project 从头开始部署到 GitHub 页面。[不使用 create-react-app]
- jquery - 导航栏悬停效果+带有子导航的图像
- html - AngularJS:模拟要下载的 URL 单击和重命名文件
- ios - 突出显示时更改 UIButton 边框颜色与标题同步
- try-catch - 使用空索引的默认值捕获错误
- android - BLE BluetoothGattDescriptor setValue 问题
- silverstripe - silverstripe 流利的语言环境配置
- android - 如何使用许多适配器制作自定义回收器视图