js執行shell命令的幾種方式(Node)

2021-10-09 20:12:31 字數 2873 閱讀 2716

在做乙個客戶端基建專案的時候,多處需要用到js調取命令列執行shell指令碼,這裡對shell命令、js執行shell命令做乙個簡單的介紹和總結。

前言

一般在純前端靜態頁面的專案中,是不需要js調命令列操作的,通常在node專案,或者在electron客戶端專案中,可能會有這樣的需求。(electron這個客戶端框架本身就內建了node的很多方法)。因此下文針對的是有node層的專案如何執行shell。

先來了解一下shell是什麼?

linux/unix中的shell,翻譯是』殼』的意思;shell提供了使用者與核心進行互動操作的一種介面。它接收使用者輸入的命令並把它送入作業系統的核心去執行。

1、命令列

使用者直接在shell介面上執行shell命令,一行行書寫,很少寫出成套的程式來執行,所以稱為命令列。

2、shell指令碼

使用者事先編寫乙個sh指令碼檔案,而後使用shell程式執行該指令碼,這種方式,我們稱shell程式設計。

調起shell的幾種方式介紹(不限於這幾種)

child_process:node的乙個子程序api,可建立乙個子程序用於執行命令列

shelljs: 基於node的api封裝的乙個shell執行外掛程式

******-git:基於node的ap封裝的乙個git命令執行外掛程式

依次來了解一下吧介紹

child_process是node提供的乙個子程序ap,具體可見官網、中文網關於此類api的介紹,對衍生shell及引數有非常詳細的說明,下面列出兩個常用的api

1. child_process.exec(command[, options][, callback])

command:要執行的shell命令

建立乙個新的shell程序,然後執行command

2. child_process.execfile(file[, args][, options][, callback])

file:要執行的檔名稱或路徑,引數作為陣列傳入

直接將可執行的file建立為新程序;需要單獨寫.s**件,可編寫複雜邏輯,但在windows上使用時會有相容問題(此外,還有child_process.spawn()等可供選擇)

示例

const util =

require

('util');

const child_process =

require

(『child_process')

;// 呼叫util.promisify方法,返回乙個promise,如const = await exec('rm -rf build')

const exec = util.

promisify

(child_process.exec)

;join

(__dirname,);

const runclean =

async

function()

);mkdir建立目錄

mkdir(』-p』, 『/tmp/a/b/c/d』, 『/tmp/e/f/g』);

mkdir(』-p』, [』/tmp/a/b/c/d』, 『/tmp/e/f/g』]); // same as above

示例const shell =

require

(『shelljs』);……

router.

get(

'/update-git'

,function

(req, res, next)/$

/$`)

)/$/

$`,}

);}else$`

,/$`

,});

}……})

;

鑑於上個例子,執行shell指令碼操作git,其實對於複雜的git命令語句,寫起來還是很不方便,最後介紹乙個專為git設計的外掛程式:******-git(npm位址)

介紹在專案中引入外掛程式後,呼叫******-git/promise可執行非同步git操作,方便結合async/await使用

它封裝並支援了很多git的方法,比如clone、commit、status、pull等等,將cmd命令和引數,傳入即可

甚至可以用git.raw(),解析前端輸入的git命令

示例

以下為客戶端專案通過ipc通訊,處理git的請求

const ******git =

require

('******-git/promise');

......

// 執行客戶端模擬的 ******-git 函式

ipcmain.

handle

('******-git'

,async

function

(e,)

catch(e

), e)

;throw e;}}

);

上面介紹了shell的概念及三種js執行shell命令的方式(這裡只列出了簡單的命令,實際也可以根據需要編寫.s**件,傳參相對路徑,執行更複雜的shell指令碼);總的來說,有以下幾點:

shell是一種使用者與核心進行互動操作的介面,我們通過執行shell命令列或者指令碼可對本機檔案、程序等進行操作。

js要執行shell命令,有很多方式,這裡總結了幾種基於node的方式:

child_process 原生nodeapi,需根據需要選型

shelljs node的乙個擴充套件外掛程式、相容性好

******-git

專為git命令打造的外掛程式,輕量好用

python中執行shell命令的幾種方式

最近有個需求就是頁面上執行shell命令,第一想到的就是os.system,os.system cat proc cpuinfo 但是發現頁面上列印的命令執行結果 0或者1,當然不滿足需求了。嘗試第二種方案 os.popen output os.popen cat proc cpuinfo prin...

python中執行shell命令的幾個方法

這篇文章主要介紹了python中執行shell命令的幾個方法,本文一共給出3種方法實現執行shell命令,需要的朋友可以參考下 最近有個需求就是頁面上執行shell命令,第一想到的就是os.system,如下 os.system cat proc cpuinfo 但是發現頁面上列印的命令執行結果 0...

python中執行shell命令的幾個方法小結

最近有個需求就是頁面上執行shell命令,第一想到的就是os.system,複製 如下 os.system cat proc cpuinfo 但是發現頁面上列印的命令執行結果 0或者1,當然不滿足需求了。嘗試第二種方案 os.popen 複製 如下 output os.popen cat proc ...