프로그램 설치 확인 및 스크립트 계속 진행

프로그램 설치 확인 및 스크립트 계속 진행

나는 (내 생각에) 특정 프로그램과 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)명령 대체가 서브쉘에서 실행되기 때문에 유용한 작업을 수행하지 않으므로 디렉토리를 변경해도 메인 쉘에 영향을 미치지 않습니다.

이것:

$(pregunta $(programa_instalado node))

먼저 출력하는 함수가 programa_instalado호출됩니다 1. 그런 다음 쉘은 명령을 실행하려고 시도 pregunta 1하지만 오류로 판단하면 해당 이름의 명령이 없습니다. 그렇다면,출력은 명령으로도 실행됩니다..

git마찬가지 이므로 npm실제로 이러한 장치가 설치되어 있지 않거나 장치가 PATH괜찮은지 확인해야 합니다.

관련 정보