2016-08-04 129 views
0

我在学习bash脚本,并试图编写一个脚本来检查nodeJs是否已安装,如果不是,请安装它。已安装NodeJs,但无法执行它。用bash脚本把它弄糊涂

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 

我不知道我打破了什么......任何想法?非常感谢。

回答

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,那么你确实已经取代了二进制。

+0

感谢您的快速回答。现在我修改了脚本并运行了它。但我仍然无法运行'node -v'。它一直给我同样奇怪的输出。运行错误版本的脚本时是否修改了某些内容? (带有/ usr/bin /节点的那个)。谢谢! –

+1

@PablitooMenii是的,你做到了。您将不得不重新安装节点。 –

+1

@PablitooMenii:是的,你确实修改了一些东西。您删除了节点可执行文件并将其替换为脚本的输出。这就是'command -v node>/usr/bin/node'的含义。 – slebetman

相关问题