【问题标题】:Get a bash script to run node.js [duplicate]获取一个 bash 脚本来运行 node.js [重复]
【发布时间】:2017-01-14 17:30:36
【问题描述】:

我有一个接受整数 arg 的 node.js 文件。

我正在尝试编写一个 bash 脚本来查找可用内核的数量并为每个可用内核启动 main.js。

对于 1 个核心,它应该调用:

node main.js 3000 &

对于 2 个核心:

node main.js 3000 &
node main.js 30001 &

等等……

这是我的 bash 脚本:

#!/bin/bash
numCores=`getconf _NPROCESSORS_ONLN`
i=0
j=3000
while [ $i < $numCores ]
do
    j=$($j+$i)
    node /myApp/main.js $j &
    i=$($i+1)
done

当我尝试运行它时,我得到了这个错误:

bash launchnode.sh
launchnode.sh: line 5: 2: No such file or directory

main.js 和launchnode.sh 在同一个目录。

有什么帮助吗?

【问题讨论】:

  • shellcheck.net 会自动为您捕捉到这个(以及许多其他错误)。
  • j=$(($j+$i)) 算术括号加倍

标签: node.js bash


【解决方案1】:

错误在这里:

while [ $i < $numCores ]

在 bash 中 &lt; 用于输入重定向。 [test 命令的别名,test 0 &lt; 2 表示“将输入从名为2 的文件发送到命令test 0

改为使用test-lt 选项进行小于比较。另外,不要忘记引用您的变量:

while [ "$i" -lt "$numCores" ]

或者,如果你只针对 bash,你可以使用算术扩展:

while (( i < numCores ))

您还需要在后续行中使用双括号进行算术运算:

i=$(($j+$i))

【讨论】:

  • 一个问题——不是唯一的问题。如果我们只针对 bash,顺便说一句,while (( i &lt; numCores )) 可能是一个更易于阅读的版本。在[ ] 里面,顺便说一句,你真的应该引用你的扩展——[ "$i" -lt "$numCores" ];这样,如果我们以某种方式得到一个未设置的变量,我们就会得到一个准确描述它的错误。
  • 其实我建议for (( port=3000; port &lt; (3000 + numCores); port++)); do node /myApp/main.js "$port" &amp; done。所有数学都在 C 风格的 for 循环的条件中,包括初始化、比较和递增。
  • 好消息@CharlesDuffy。谢谢。
猜你喜欢
  • 2019-01-05
  • 1970-01-01
  • 2019-06-24
  • 1970-01-01
  • 2017-12-12
  • 2014-06-30
  • 2023-01-13
  • 1970-01-01
  • 2014-05-04
相关资源
最近更新 更多