我在這裏使用vagrant shell配置。 我已經在我的vm Node.js上安裝了許多其他軟件包。 我想避免在我不需要它們時在自動配置腳本中運行零件。 例如 - 我已經通過我的腳本Node.js & nginx成功安裝了,所以當我想添加其他軟件包如mysql或redis時,我想將它添加到腳本中,我想運行腳本來測試它運行正確,但我不想重新安裝Node.js或nginx ...
我需要一個簡單的條件語句來檢測包是否已經安裝,並且只有在它尚未安裝的情況下才能安裝它。
是否有通用支票或與包裝不同? 謝謝 Ajar如何僅在需要(尚未安裝)流浪殼上安裝Node.js?
0
A
回答
1
dpkg -s <pkg-name> 2>/dev/null >/dev/null || sudo apt-get -y install <pkg-name>
這應該是你在找什麼。
這是怎麼回事: 這是形式<condition> && <value if true> || <value if false>
表達的第一部分採用dpkg的檢查是否安裝了軟件包,抑制輸出的有條件分配。如果條件返回錯誤,則評估第二部分。 「真實」情況被省略。
1
這取決於您使用的Linux發行版。通常,軟件包管理器會附帶某種機制來清除已安裝的軟件包。
對於Ubuntu,這是內置的 - 運行apt-get install nodejs
已經安裝的Node.js不會重新安裝它;它會跳過目標(除非有新版本可用)
對於ArchLinux,您可以添加運行pacman -Sy node --needed
來跳過已安裝的軟件包。
獨立於平臺的機制是檢查是否存在可執行文件(或該包的任何其他已知文件)。在bash中,你可以這樣做:
which node > /dev/null && echo "Yup, this is installed"
(在> /dev/null
部分supresses which
的輸出 - 它打印在那裏找到的可執行文件所在的路徑;我們不關心,我們只是想知道,如果它被安裝)
如果你想避免爲這樣的基本檢查編寫自定義的Bash腳本,我可以推薦你配置你的盒子,專門用於你想要實現的工具。這裏的常客是:
所有這些都是由流浪支撐,整合他們不應該是一個問題。你可以找到詳細的指南,將其整合到現有的流浪配方here中。
PS。對於一個簡單的例子,你可以查看我的Ansible provisioning recipe運行ArchLinux的Banana Pi機器(注意:它並不真正遵循最佳實踐,但它可能是一個很好的起點)。網上有很多例子,請查看。
相關問題
- 1. 什麼權限需要在Windows上安裝流浪鮑爾?
- 2. 製作安裝程序並安裝庫(如果尚未安裝)
- 3. feedparser未安裝。使用流浪漢
- 4. 流浪模版CLI安裝
- 5. 如何爲流浪項目安裝drush?
- 6. 包安裝失敗,角上流浪
- 7. QBXML組件尚未安裝
- 8. 僅在安裝OS X卷時才安裝 - 如何安裝?
- 9. 如何在debian流浪盒上安裝npm?
- 10. Wix&Burn - 如果尚未安裝,請安裝IIS
- 11. Python和Visual Studio需要安裝Node.js模塊(Superfeedr Node.js包裝器)
- 12. 在CentOS 5上安裝node.js
- 13. 在Socket.IO Node.js上安裝SSL
- 14. 在Mac上安裝Node.JS
- 15. 在PowerVPS上安裝node.js
- 16. 在Debian 6.0上安裝node.js
- 17. Macports安裝需要
- 18. 安裝需要GUI
- 19. 如何在Synology DiskStation上安裝node.js DS713 +
- 20. 如何在Node.js上安裝Socket.io?
- 21. 如何在JetBrains PhpStorm上安裝Node.js?
- 22. 如何在Windows 10上安裝Node.js?
- 23. 如何讓vcredist_x86只在尚未安裝的情況下重新安裝?
- 24. 哪裏安裝了流浪插件?
- 25. 流浪者分享本地WordPress安裝
- 26. 流浪安裝到Apache文件夾
- 27. 問題PEAR安裝與流浪漢
- 28. 紅寶石安裝木偶流浪
- 29. 流浪者插件安裝失敗
- 30. 流浪和php7安裝失敗
嗨羅伯特&謝謝你的回覆! 我使用ubuntu,並且使用apt-get安裝的軟件包很好地知道它會自動檢查現有軟件包。然而,一些軟件包是從源代碼安裝的(比如節點js和其他的),所以我不能僅僅依靠這個。你的「哪一行」對我來說很好,我只需要休息一下......如果一個軟件包沒有安裝它。我是一個bash腳本的初學者。 在檢查不同的編排工具後,Ansible將成爲我的選擇,但是當我進行縮放時,我會進入它。 – Ajar 2015-03-14 11:51:47
現在我只想創建簡單的部署工作流程,並且不能再購買另一條學習曲線。對我來說,現在這是一種矯枉過正的情況,儘管這些工具看起來很棒。那麼Docker - 機器/組合/羣集,CoreOS etcd/systemd /艦隊,Mesos Zookeeper等等......它永遠不會結束......我現在真正需要的只是一個簡單的bash「if」語句,它檢查如果一個軟件包已經安裝在我的Ubuntu服務器上並且安裝它,如果它沒有,你能幫我一下嗎? 乾杯,再次感謝羅伯特! – Ajar 2015-03-14 11:51:51
也許[IF中的Bash教程](http://www.tldp.org/LDP/Bash-Beginners-Guide/html/chap_07.html)會有幫助嗎? – 2015-03-14 11:54:06