bash - 带有异步文件的 Bash 连接器
问题描述
我有一个database/seed.js
对数据库执行异步插入的文件。
如果我运行node database/seed.js && mongo < ./database/updateCounter.js
,我能保证mongo < ./database/updateCounter.js
在异步插入完全完成后运行吗?
这个答案说A && B
手段只有在成功的B
情况下才会运行A
,但成功是如何确定的?
解决方案
成功由命令的退出状态决定。
每个 linux 进程在终止时都会返回一个名为exit status的整数。这是您通常return 0
在大多数编程语言的语句中看到的数字。
AND 列表具有以下形式
command1 && command2
当且仅当 command1 返回退出状态为零时,才会执行 command2。
退出状态等于 0 通常意味着成功,非零退出状态意味着失败。就像grep
- 退出状态等于 0 意味着在文件/流中找到模式一样,退出状态grep
等于 1 意味着在文件/流中没有找到模式。bash 或 shell 内置程序中有两个简单的程序 -true
和false
,第一个返回状态 0,另一个返回状态 1。这与编程语言中的布尔值相反 - 通常 true 定义为具有非零值,通常为 1,而 false被定义为零。
在您的问题中,使用了“异步”一词,表示该操作是异步发生的。通常意味着动作已经开始或被请求开始,但可能已经完成也可能没有完成以及结果如何。我不知道它是做什么database/seed.js
的以及它是如何工作的 - 检查它并参考它以了解它在哪些条件下设置的退出状态。
但是,如果您运行node database/seed.js && mongo < ./database/updateCounter.js
,则“保证”该mongo
程序将在且仅当该node
程序已终止且退出状态为零时才执行。我引用了“保证”,因为没有人以任何方式向您保证 - bash 是根据GNU 通用公共许可证获得许可的,您可以在许可证中清楚地阅读:
- 免责声明。
在适用法律允许的范围内,本程序不提供任何保证。除非另有说明,否则版权所有者和/或其他方按“原样”提供程序,不提供任何形式的明示或默示保证,包括但不限于对适销性和特定用途适用性的默示保证. 有关程序质量和性能的全部风险由您承担。如果该程序被证明有缺陷,您将承担所有必要的服务、修理或更正的费用。
推荐阅读
- java - Socket OutputStream.write() 阻塞行为
- java - JavaCV Fetch RTSP 遇到“avcodec_open2() 错误 -40: 无法打开音频编解码器”错误
- python - 如何查找不在 OneToOneField 右侧的项目?
- javascript - Cant get firebase to stop overriding old pictures when I upload them in javascript/jquery
- python - 访问python列表循环中的第二个值
- python - 如何以 ~C 速度排空/耗尽异步发电机?
- php - webpack encore symfony4 中的引导程序和 jquery
- uml - 我应该使用 UML 跟踪还是实现
- go - 在一片处理程序中注册一个 http URL 处理程序
- c# - 当 JavaScript 被缩小时,捆绑会产生冲突