我有这个脚本(我认为)检查某些程序和 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
是否正常。