" make -j 4:找不到命令"从脚本

时间:2016-01-19 03:11:22

标签: linux bash shell command

我在将 -j 4 添加到make命令时遇到问题。它导致我的Bash脚本失败:

./cryptest.sh: line 208: make -j 4: command not found
ERROR: failed to make cryptest.exe

这是决定何时添加 -j 4 的Bash。它似乎主要是工作:

# $MAKE is already set and either 'make' or 'gmake'
CPU=$(cat /proc/cpuinfo | grep -c '^processor')
if [ "$CPU" -gt "1" ]; then
    echo "$CPU processors, using \"$MAKE -j $CPU\""
    MAKE="$MAKE -j $CPU"
fi

然后,Bash调用它并导致错误:

"$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
if [ "${PIPESTATUS[0]}" -ne "0" ]; then
        echo "ERROR: failed to make cryptest.exe" | tee -a "$TEST_RESULTS"
fi

Stack Overflow与其他命令有类似的问题,比如Execute command as a string in Bash,但对我来说,如何简单地将命令的参数附加到命令中并不明显。并且在上述错误中做了明显的结果,因此像How can I concatenate string variables in Bash这样的问题似乎并不适合这种情况。

如何将 -j 4 附加到 $MAKE

我也尝试了以下内容:

MAKE="$MAKE" "-j $CPU"

但结果是:

./cryptest.sh: line 186: -j 4: command not found

最后,其中有50到75个:

export CXXFLAGS="..."
"$MAKE" static dynamic ...

所以我想修复1 "$MAKE",而不是50或75次使用它。

1 个答案:

答案 0 :(得分:3)

您正在尝试运行名为“make -j 4”的命令,而不是使用参数“-j”和“4”运行命令“make”。在这种情况下,您只需使用

运行命令即可
$MAKE static dynamic cryptest.exe 2>&1 ...

即没有引用$MAKE的扩展。但是,通常不应将命令调用存储在变量中,只应命令 names 。将参数存储在(最好)数组中。

MAKE=make
MAKEARGS=( -j 4 )

"$MAKE" "${MAKEARGS[@]}" static dynamic cryptest.exe ...