2016-08-04 128 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

相關問題