Terminal 系列 - 同時運行多個命令
在開發中常需要同時執行多個命令,
concurrently
的出現就是爲了滿足此類場景。
背景
作者喜歡使用 npm[1] 實現任務自動化,但同時運行多個命令的常用方法是 npm run watch-js & npm run watch-css
。使用 &
很好,卻很難跟蹤不同的輸出。此外,如果一個進程失敗,其他進程仍會繼續運行,你也不會注意到其中的差異。另一種選擇是在單獨的終端中運行所有命令,但每個命令的運行都必須新開一個終端窗口更令人厭煩。
安裝
因其使用 JS 編寫,所以運行需要依賴 Node.js[2] 環境。
# 全局安裝
npm i -g concurrently
# 項目中安裝(-D: 開發依賴)
npm i -D concurrently
使用
命令使用幫助,以下列舉了部分使用參數,查看文檔瞭解更多 concurrently[3]:
concurrently -h
concurrently 'echo "hello\n"' 'echo "world\n"' "git status"
--raw (-r)
直接輸出子進程:stdout + stderr:
concurrently --raw 'echo "hello\n"' 'echo "world\n"' "git status"
--prefix (-p)
自定義前綴,日期格式請參考 date-fns[4]:
concurrently --prefix "{time}-{pid}" 'echo "hello\n"' 'echo "world\n"' "git status"
--prefix-colors (-c)
自定義前綴顏色,顏色列表請參考 chalk[5]:
concurrently -c "bgBlue.bold,bgMagenta.bold" 'echo "hello\n"' 'echo "world\n"' "git status"
自動改變前綴顏色:
concurrently -c auto --prefix "{time}-{pid}" 'echo "hello\n"' 'echo "world\n"' "git status"
--names
自定義前綴名稱
concurrently --names "HELLO,WORLD,GH" -c "auto" 'echo "hello\n"' 'echo "world\n"' "git status"
名詞解釋
-
標準流 (Standard streams)[6] - 在 Unix 和類 Unix 系統中,如同某些編程語言接口一樣,標準流是當一個計算機程序執行時,在它和它的環境間(一般指終端),事先連接的輸入和輸出頻道。這三個
I/O
鏈接稱作 “標準輸入”、“標準輸出” 和“標準錯誤輸出”。 -
標準輸入 (stdin) - 指輸入至程序的資料(通常是文件)。程序要求以讀 (read) 操作來傳輸資料。並非所有程序都要求輸入。如
dir
或ls
程序(顯示一個目錄中的文件名)運行時不用任何輸入。除非被重導向 (redirection: 進程間通信的一種形式)
,否則輸入一般從鍵盤獲取。 -
標準輸出 (stdout) - 指程序寫輸出資料的流。程序要求資料傳輸使用寫 (write) 的運算。並非所有程序都要求輸出。如
mv
或ren
程序在成功完成時是沉默的。除非被重導向,否則輸出一般是終端。 -
標準錯誤輸出 (stderr) - 另一輸出流,用於輸出錯誤消息或診斷。它獨立於標準輸出,且可以分別被重導。常見的目的則爲啓始這個程序的終端,即使其標準輸出被重導亦如此。例如:一個流水線中的程序的輸出被重導到下一個程序,但錯誤消息仍然直接流向文字終端。
References
[1]
npm: https://www.npmjs.com/
[2]
Node.js: https://nodejs.org/
[3]
concurrently: https://github.com/open-cli-tools/concurrently
[4]
date-fns: https://date-fns.org/v2.0.1/docs/format
[5]
chalk: https://github.com/chalk/chalk
[6]
標準流 (Standard streams): https://en.wikipedia.org/wiki/Standard_streams
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/4Sz30vTvVB8ticfH02SHHg