shell 在bash中使用if条件将npm输出指定为变量

f8rj6qna  于 2022-11-16  发布在  Shell
关注(0)|答案(1)|浏览(182)

目标:遍历软件包列表并只发布不存在于npm注册表中的软件包。如果注册表中已经存在相同版本的软件包,则放弃任何进一步的操作。

package="@react-framework/deploy@1.2.3.0" // package name extracted from the actual tgz file

checkRegistry=$(npm view $package) # There are three types of output
# NPM Err (Package Not Exists)
# NULL (Package Not Exists)
# return information about the package (Package Exists)

if [ [grep -q "npm ERR!"] || [$checkRegistry==""] ]; then
   npm publish $package

我一直有一个错误的if语句,并假设有一个语法错误与我的条件。
我想知道:
1.是否可以将npm命令的输出(在本例中为npm view)赋给变量?

  1. if语句的语法有什么问题吗?
2w3kk1z5

2w3kk1z51#

grep不应该放在方括号内,因为您希望直接测试它是否成功,而不是在test命令中使用它的输出。
您也没有使用$checkRegistry的值作为grep命令的输入。
但是,如果只想检查$checkRegistry是否与模式匹配,则不需要使用grep,可以使用shell的内置regexp匹配。

if [[ "$checkRegistry" = "" || "$checkRegistry" =~ "npm ERR!" ]]
then
    npm publish "$package"
fi

相关问题