检查程序安装并继续脚本

检查程序安装并继续脚本

我有这个脚本(我认为)检查某些程序和 npm 包的存在,然后继续执行操作:

#!/bin/bash

# Functions ==============================================

function programa_instalado {
  # set to 1 initially
  local return_=1
  # set to 0 if not found
  type $1 >/dev/null 2>&1 || { local return_=0; }
  # return value
  echo "$return_"
}

function paquete_npm_instalado {
  # set to 1 initially
  local return_=1
  # set to 0 if not found
  ls node_modules | grep $1 >/dev/null 2>&1 || { local return_=0; }
  # return value
  echo "$return_"
}

function pregunta_node {
  if [ $1 == 1 ]; then
    $(echo "Node ya instalado")
  else
    $(curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -)
    $(sudo apt-get install -y nodejs)
    $(sudo apt-get install -y build-essential)
  fi
}

function pregunta_pyinstaller {
  if [ $1 == 1 ]; then
    $(echo "Pyinstaller ya instalado")
  else
    $(pip install pyinstaller)
  fi
}
function pregunta_zerorpc {
  if [ $1 == 1 ]; then
    $(echo "Zerorpc ya instalado")
  else
    $(pip install zerorpc)
  fi
}

# ============================================== Functions

# command line programs
$(pregunta_node $(programa_instalado node))
$(pregunta_zerorpc $(paquete_npm_instalado zerorpc))
$(pregunta_pyinstaler $(paquete_npm_instalado pyinstaller))
$(git clone some_url)
$(cd folder)
$(npm install --runtime=electron --target=1.7.9)
$(pyinstaller server.py --distpath dist ; rm -rf build/ ; rm -rf server.spec)
$(./node_modules/.bin/electron-packager . --overwrite)

问题是执行永远挂起。我不知道可能出了什么问题

答案1

命令替换$(...)运行括号内给出的命令,并且将输出放回命令行(嗯,或多或少,特别是看到这里如果您确实需要它。)

这些做同样的事情:

ls $(echo /bin)
ls /bin

在大多数情况下,您不想在命令行上单独运行命令替换,而只是正常运行命令(就像您对 所做的那样ls node_modules | grep ...)。这也和前面的一样,但很奇怪:

$(echo ls /bin)

特别$(cd somedir)是不会做任何有用的事情,因为命令替换在子 shell 中运行,因此更改那里的目录不会影响主 shell。

这:

$(pregunta $(programa_instalado node))

首先调用函数programa_instalado,该函数输出(比如说)1。然后 shell 尝试运行该命令pregunta 1,但从错误来看,没有具有该名称的命令。如果有的话,它的输出也将作为命令执行

git也是如此npm,所以要么你真的没有安装这些,要么你应该检查你的PATH是否正常。

相关内容