Wie schreibe ich ein Shell-Skript in Node? Im folgenden Artikel erfahren Sie, wie Sie mit der zx-Bibliothek Shell-Skripte in Node schreiben.
Shell-Skript
Das Erstellen eines Shell-Skripts, also eines Skripts, das von einer Shell wie Bash oder zsh ausgeführt wird, ist eine gängige Methode zur Automatisierung wiederkehrender Aufgaben, insbesondere für Betriebs- und Wartungspersonal . . Für Front-End-Ingenieure ist die Verwendung von Node.js zum Schreiben von Shell-Skripten eine gute Wahl, da es viele Kernmodule bereitstellt und andere Front-End-Skriptbibliotheken importieren kann, wodurch die Lernkosten gesenkt werden.
Wenn Sie versuchen möchten, ein Shell-Skript zu schreiben, das unter Node.js ausgeführt wird, ohne zx.js
zu verwenden, werden Sie möglicherweise feststellen, dass es nicht so reibungslos funktioniert, wie Sie es sich erhoffen. Sie müssen eine spezielle Behandlung für den untergeordneten Prozess schreiben, darauf achten, die Befehlszeilenparameter zu maskieren und dann die Standardausgabe stdout
und die Standardfehlerausgabe stderr
verwenden. Dies ist nicht besonders intuitiv , und Shell-Skripte zum Schreiben von Variablen verwenden Sehr umständlich. zx.js
想尝试编写一个在 Node.js 下运行的 shell 脚本,可能会发现它并不像希望的那样流畅。需要为子进程编写特殊处理,注意转义命令行参数,然后使用标准输出 stdout
和标准错误 stderr
,它不是特别直观,并且使用 shell 脚本编写变得非常笨拙。
Bash shell 脚本语言是编写 shell
脚本的最佳选择,不需要编写代码来处理子进程,并且它具有用于处理 stdout
和 stderr
的内置语言特性。但是用Bash编写 shell
脚本也不是那么容易,语法可能相当混乱,使得实现逻辑或处理提示用户输入之类的事情变得不那么方便。
Google 的 zx.js
库有助于使用 Node.js 高效且愉快地编写 shell
脚本。
官方网站:https://github.com/google/zx#-zx
安装
对于前端工程师来说,安装一个依赖是家常便饭,运行以下脚本:
npm install zx
使用
Google 的 zx.js
提供了封装子进程的创建以及从这些进程处理 stdout
和 stderr
的函数。下面将使用的主要函数是 $
函数,使用 zx.js
规定脚本写入扩展名为 .mjs
的文件中,以便能够在顶层使用 await
。如果习惯于 .js
扩展名,请将脚本包装在类似 void async function () {...}()
中。
下面先来使用扩展名 .mjs
,每个 .mjs
文件都将以下代码作为开头:
#! /usr/bin/env node
下面就来实现一个 shell
脚本中 ls
的功能,创建文件 ls.mjs
,完整代码如下:
#! /usr/bin/env node import { $ } from "zx"; $.verbose = false; const output = (await $`ls`).stdout.trim(); console.log(output);
和 shell
脚本文件一样,需要将其转为可执行文件:
chmod +x ./ls.mjs
下面就来执行这个 Node.js 编写的 shell
脚本,执行:
./ls.mjs
Google 的 zx.js
还提供了其他实用函数来简化 shell 脚本编写,例如:
cd()
:允许更改当前的工作目录question()
:Node.js 的 readline 模块的包装器,可以直接提示用户输入。
#! /usr/bin/env node import { $, cd } from "zx"; $.verbose = false; // 默认为true,以详细模式运行 const output = (await $`ls`).stdout.trim(); console.log(output); const dirName = "zx-mkdir-tmp"; await $`mkdir ${dirName}`; // 创建目录 cd(`./${dirName}`); const pwdOutput = (await $`pwd`).stdout.trim(); console.log(pwdOutput); // zx-mkdir-tmp
除了 zx.js
提供的实用功能外,它还提供了几个流行的脚本库,例如:
argv
对象下。fs
Shell
-Skripten. Es ist nicht erforderlich, Code für die Verarbeitung untergeordneter Prozesse zu schreiben, und sie verfügt über Funktionen für die Verarbeitung von stdout
und Die integrierten Sprachfunktionen von stderr
. Aber das Schreiben von Shell
-Skripten in Bash ist nicht so einfach, und die Syntax kann ziemlich verwirrend sein, was es unpraktisch macht, Logik zu implementieren oder Dinge wie die Aufforderung zur Benutzereingabe zu handhaben. Die zx.js
-Bibliothek von Google hilft beim effizienten und reibungslosen Schreiben von Shell
-Skripten mit Node.js.
zx.js
bietet Funktionen, die die Erstellung von untergeordneten Prozessen kapseln und stdout
und stderr
aus diesen Prozessen verarbeiten. Die Hauptfunktion, die im Folgenden verwendet wird, ist die Funktion $
. Verwenden Sie zx.js
, um anzugeben, dass das Skript in eine Datei mit der Erweiterung .mjs, damit es <code>await
auf der obersten Ebene verwenden kann. Wenn Sie an die Erweiterung .js
gewöhnt sind, packen Sie Ihr Skript in etwas wie void async function () {...}()
ein. 🎜🎜Lassen Sie uns zunächst die Erweiterung .mjs
verwenden. Jede .mjs
-Datei beginnt mit dem folgenden Code: 🎜rrreee🎜Lassen Sie uns eine Shell implementieren Funktion von <code>ls
im Skript erstellt die Datei ls
. Der vollständige Code lautet wie folgt: 🎜rrreee🎜Es ist derselbe wie die Shell
Skriptdatei und erfordert die Konvertierung in eine ausführbare Datei: 🎜rrreee🎜 Lassen Sie uns dieses in Node.js geschriebene Shell
-Skript ausführen. Ausführen: 🎜rrreee🎜🎜🎜Googles zx.js
bietet auch andere nützliche Funktionen Features Funktionen zur Vereinfachung des Shell-Scriptings, zum Beispiel: 🎜🎜cd()
: Ermöglicht das Ändern des aktuellen Arbeitsverzeichnisses question()
: Ein Wrapper für das Readline-Modul von Node.js , wodurch der Benutzer direkt zur Eingabe aufgefordert werden kann. 🎜rrreee🎜Zusätzlich zu den praktischen Funktionen, die zx.js
bietet, bietet es auch mehrere beliebte Skriptbibliotheken, wie zum Beispiel: 🎜argv
-Objekt verfügbar. 🎜fs
sowie viele andere Möglichkeiten zur Verfügung, um die Arbeit mit Dateisystemen zu vereinfachen. 🎜🎜🎜Weitere Informationen zu Knoten finden Sie unter: 🎜nodejs-Tutorial🎜! ! 🎜Das obige ist der detaillierte Inhalt vonIn diesem Artikel geht es um die Verwendung der zx-Bibliothek zum Schreiben von Shell-Skripten in Nodejs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!