我正在学习bash脚本,并且正在尝试编写一个脚本来检查是否安装了nodeJs,如果没有,则安装它。
NodeJs安装在我的系统中。在搞砸之前,我在执行node -v
时得到的输出是v4.x.x。
然后,我关注this post并在我的脚本中编写了以下代码:
#!/bin/bash
if [ command -v node >/usr/bin/node 2>&1 ]; then
# save node version in a string variable.
STRING=cat | node -v
echo "NodeJs version: " ${STRING}
else
echo "NodeJs not found."
fi
我执行了我的脚本(testScript.sh),但现在当我运行node -v
时,我得到的输出是:
/usr/bin/node: line 1: ./testScript.sh:: No such file or directory
我无法弄清楚我打破了什么......有什么想法吗?非常感谢。
答案 0 :(得分:1)
在您的脚本中,您尝试将command -v node
的输出重定向到文件/usr/bin/node
。这不是你想要的。该脚本应该是:
#!/bin/bash
if [ command -v node >/dev/null 2>&1 ]; then
# save node version in a string variable.
STRING=cat | node -v
echo "NodeJs version: " ${STRING}
else
echo "NodeJs not found."
fi
在此处详细了解/dev/null
:http://man7.org/linux/man-pages/man4/null.4.html
您似乎已使用命令/usr/bin/node
的内容覆盖了二进制文件command -v node
。查看命令的输出:file /usr/bin/node
。它应该是ELF
文件。如果输出中有ASCII text
,那么您确实已经替换了二进制文件。