我如何始终在bash中运行“清理”命令以传播先前的错误代码?

时间:2018-06-28 13:00:04

标签: node.js bash testing npm

我正在为Node.js项目设置测试。测试包括与应该从本地http-server提供的静态内容(图像)进行交互。

测试完成时-成功还是失败-我想结束服务器进程并以正确的代码退出。我在npm脚本中想到的是以下内容:

"server": "http-server testdata -p 9876 -s",
"testcmd": "...",
"test": "npm run server & npm run testcmd && kill $(lsof -t -i:9876) || (kill $(lsof -t -i:9876) && exit 1)",

哪个“有效”,但是有两个问题:

  • 它重复了代码,因为我不知道如何在任何情况下运行事情,而不是定义||&&情况
  • testcmd的任何非零退出代码将始终转换为1退出代码-理想情况下,我想传播确切的退出代码

我尝试阅读有关内容,发现有人在谈论陷阱,但无法使其正常工作。

什么是简化此控制流程方案的好方法?

1 个答案:

答案 0 :(得分:1)

您的两个问题联系在一起:如果将命令分解得更好,则可以轻松实现所追求的目标。

由于您不想设置陷阱(对于此任务,我也不会怪您),因此您需要做的是捕获 testcmd的退出状态这样您以后就可以重申。完成此操作后,您可以无条件运行清理,因此无需重复。例如:

npm run server & (npm run testcmd; status=$?; kill $(lsof -t -i:9876); exit $status)

也许缺少的特殊参数$?扩展为最近执行的[partial]管道的退出状态。