So verwenden Sie Shell-Skripte in Node

So verwenden Sie Shell-Skripte in Node

Hintergrund

Während der Entwicklung benötigen wir in bestimmten Situationen möglicherweise einige Skripte, um unsere Geschäftslogik stapelweise zu verarbeiten. Wie ruft man Shell-Skripte in Node.js auf?

Neu

Erstellen Sie eine neue Skriptdatei unter dem Projekt

berühren Sie neueDatei.sh

Dateiberechtigungen ändern

chmod 777 newFile.sh ändert die Datei so, dass sie lesbar, beschreibbar und ausführbar ist

Nodejs-Aufruf

Lesen von Dateien

//Verwende die Methode zum Lesen von Dateien im untergeordneten Prozess von nodejs const { execFile } = require('child_process');

Beispiel

DocsService.publishAllDocs = (erfordert, res) => {
 erfordert.session.touch();
 const { docName, pathName, saveDocsList, docType } = req.body;
 var docText = erforderlich.body.docText;
 var newGit = req.body.newGit;
 //Dateipfad abrufen var filepath = path.join(__dirname, '../../bin/rnsource/publishAllDocs.sh');
 var fileArr, Dateiname, spath, VerzeichnisnameZurück, docbackList = [], docbackPath, docPath = "";
 var Benutzername = req.session.user_name;
 var str = docName+'/'+ Pfadname + '|'+ Benutzername;
 var reg = neuer RegExp(`^(${str})`);
 saveDocsList.map((item, index)=>{
   fileArr = item.PfadName.split("/");
   Dateiname = Dateiarr[Dateiarr.Länge-1];
   wenn(docType == "docsify"){
     dirnameBack = Dateiname != "" ? `../../gitlib/docBackup/${docName}/docs/${item.pathName}`:`../../gitlib/docBackup/${docName}/docs/README.md`
   }anders{
     spath = item.Pfadname.split(Dateiname)[0];
     dirnameBack = spath != "" ?'../../gitlib/docBackup/'+ docName+'/'+ spath +'/'+fileName:'../../gitlib/docBackup/'+ docName+'/' + fileName; 
   }

   docbackPath = Pfad.join(__dirname, dirnameBack);
   docbackList.push(docbackPath);
   docPfad += docbackPfad + " ";
 })
 docPath += ""
 //cwd legt den aktuellen Pfad fest. Was ich hier festlege, ist der aktuelle Speicherort des NodeJS-Codes js execFile(filepath, [docName, docPath, docType], { cwd: '.' }, function(err, stdout, stderr){
   logger.info(stdout);
   wenn(fehler){
     loggerFileError({user:Benutzername,docName:docName,pathName:'alle',operate:"Gitbook-Datei mit einem Klick freigeben",err});
     res.json({
       Antwortcode: -1,
       errMsg: „Veröffentlichung mit einem Klick fehlgeschlagen“
     })
   }anders{
     res.json({
       Antwortcode: 0,
       msg: „Ein-Klick-Veröffentlichung erfolgreich“
     })
     gitPush({ docName, fileName, docbackPath: docbackList, username, pathName, docType })
     unblockFile({ docName, username, pathName, reg });
   }
 }) 
}

Rückrufe

Bei erfolgreicher Ausführung wird der vom Skript ausgeführte Befehl zurückgegeben.

execDatei

  • Der erste Parameter: das aufzurufende externe Programm, hier die zu lesende Datei
  • Zweiter Parameter: Parameter, die an das externe Programm übergeben werden (müssen in einem Array platziert werden)
  • Der dritte Parameter: Rückruffunktion, in der das Ausführungsergebnis des externen Programms zurückgegeben werden kann

Hülse

publishAllDocs.sh Hinweis: Alle Anweisungen hier sind Shell-Skripte für Nicht-Windows-Betriebssysteme. Die .bat-Skripte für Windows werden hier nicht erklärt.

#$1 Das äußerste Verzeichnis des Dokuments$2 Der Name der aktuell geänderten Datei$3 Das Verzeichnis der aktuell geänderten Dateicd $(pwd)/gitlib/docs/$1
Echo "Komm rein"
für Artikel in $2; tun
  echo "${item}"
  cp -f ${item} ${item/docBackup/docs}
Erledigt
# echo "Initialisierungseintrag"
echo "$(pwd)/gitlib/docs/$1"
wenn [ "$3" == "docsify" ]; dann
  #Kopieren Sie die Dateien in das angegebene Verzeichnis, zum Beispiel: $1/$3/$2 docs/cst/7e4ce1de04621e0b/
  #Wie z. B. cp -rf ../../docBackup/wireless/docs/cst/7e4ce1de04621e0b/10708d589eedfffd.md ./docs/cst/7e4ce1de04621e0b/
  cp -rf ./docs ../../../public/docs/$1
anders
  # Gitbook-Typdokumente verarbeiten gitbook build
  echo "Dokument kopieren"
  cp -rf ./_book/* ../../../public/docs/$1
fi

Parameterempfang

  • Abrufen von Parametern basierend auf den bei Geschäftsanrufen übermittelten Daten
  • Verwenden Sie "$" direkt, um
  • Die Erfassungsreihenfolge ist die Reihenfolge, in der die Daten übergeben werden.
  • Denken Sie daran, dass der erste Parameter des Arrays nicht der Wert des Array-Index ist.

Verwendung der for-Schleife

Verwenden Sie das for...in-Formular in der Shell

Beispiel für Schleifenkörperdaten, die wiederholt werden müssen

"/Users/desktop/work/docmanager/docserver/gitlib/docbackup/mygitbook/docs/d09985fc6708b35/d09985fc67088b35.md/user/Desktop/docmanager/docsManager/docsManager/docsManager/docsManager 09985FC67088B35/D09985FC67088B35/6F7A2C61C9BAC0A3.MD /Users/desktop/work/docManager/docserver/gitliB/docbackup/mygitbook/readme.md/doktop/mygitbuch lib/docbackup/mygitbook/docs/d09985fc67088b35/d09985fc67088b35/6f7a2c61c9bac0a3.md "

Die Daten im Schleifenkörper des Shell-Skripts sind speziell und nicht unser reguläres Array oder JSON

Es handelt sich um eine durch Leerzeichen getrennte Zeichenfolge, beispielsweise: „abcde“

## $2 sind die im Skript empfangenen und im Format wie im obigen Datenbeispiel gezeigt zusammengefügten Daten.## Verwenden Sie for...in in einer Schleife. Denken Sie daran, danach do hinzuzufügen, um den Schleifenkörper auszuführen und die Schleife mit done zu beenden.## Jedes Unterelement des Elementschleifenkörpers lautet wie folgt: /Users/Desktop/work/docManager/docServer/gitlib/docBackup/mygitbook/docs/d09985fc67088b35/d09985fc67088b35.md
für Artikel in $2; tun
  echo "${item}"
  cp -f ${item} ${item/docBackup/docs}
Erledigt
## ${item/docBackup/docs} Zeichenfolgenersatz## Hier wird docBackup im Elementpfad durch docs ersetzt. Eine detaillierte Erklärung finden Sie unten im Shell-Zeichenfolgenersatz

Von der Shell angegebene Zeichenfolgenersetzung

In JS können wir „Replace“ verwenden, um Zeichenfolgen zu ersetzen. Wie implementieren wir es also in der Shell?

Beispiel:

Zeichenfolge "abc12342341"

  • echo ${string/23/bb} //abc1bb42341 einmal ersetzen
  • echo ${string//23/bb} //abc1bb4bb41 Doppelter Schrägstrich ersetzt alle Übereinstimmungen
  • echo ${string/#abc/bb} //bb12342341 #Womit soll man anfangen, um zu passen? Die Wurzel ^ in PHP ist ein bisschen wie
  • echo ${string/%41/bb} //abc123423bb % endet mit etwas, das übereinstimmt, das Stamm-$ in PHP ist ein bisschen wie

Verwendung des bedingten Urteils „if“

Grammatik

wenn[];dann
 ...
anders
 ...
fi

Beispiel

## Bedingtes Urteil verwendet [] statt ()
## [] sollte danach hinzugefügt werden;
wenn [ "$3" == "docsify" ]; dann
  #Kopieren Sie die Dateien in das angegebene Verzeichnis, zum Beispiel: $1/$3/$2 docs/cst/7e4ce1de04621e0b/
  #Wie z. B. cp -rf ../../docBackup/wireless/docs/cst/7e4ce1de04621e0b/10708d589eedfffd.md ./docs/cst/7e4ce1de04621e0b/
  cp -rf ./docs ../../../public/docs/$1
anders
  # Gitbook-Typdokumente verarbeiten gitbook build
  echo "Dokument kopieren"
  cp -rf ./_book/* ../../../public/docs/$1
fi

Beachten

  • Die Zeichenfolge im bedingten Urteil sollte doppelte Anführungszeichen verwenden
  • Wenn das bedingte Urteil Variablen (Zeichenfolgen) enthält, sollten die Variablen ebenfalls in Anführungszeichen eingeschlossen werden.
  • Auf das bedingte Urteil [] muss ein ; folgen, und dann muss zur Fortsetzung der Ausführung verwendet werden.
  • Das bedingte Urteil sollte mit fi enden

Dies ist das Ende dieses Artikels über die Methoden und Schritte zur Verwendung von Shell-Skripten in Node. Weitere relevante Inhalte zur Verwendung von Shell-Skripten in Node finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Verwendung des Node.js-HTTP-Moduls
  • Nodejs Exploration: Tiefgreifendes Verständnis des Prinzips der Single-Threaded High Concurrency
  • Es ist ganz einfach zu verstehen, was Node.js ist
  • Spezifische Verwendung globaler Variablen von node.js
  • Asynchroner Lebenszyklus von AsyncHooks in Node8
  • Nodejs-Fehlerbehandlungsprozessaufzeichnung
  • Der gesamte Prozess der Verwendung von node.js Express zum automatischen Erstellen des Projekts
  • Der Kernprozess der NodeJS-Verarbeitung einer TCP-Verbindung
  • Detaillierte Erklärung der Nodejs-Array-Warteschlange und der forEach-Anwendung
  • Vergleich zwischen Node.js und Deno

<<:  So aktivieren Sie die MySQL-Remoteverbindung auf einem Linux-Server

>>:  MySQL-Installationstutorial unter Centos7

Artikel empfehlen

Aktivieren Sie den SSHD-Vorgang im Docker

Installieren Sie zunächst den OpenSSH-Server im D...

JavaScript Canvas zeichnet dynamische Drahtgittereffekte

In diesem Artikel wird der spezifische Code des d...

CSS setzt die Höhe des Box-Containers (div) immer auf 100 %

Vorwort Manchmal muss die Höhe eines Box-Containe...

Lösen Sie das Problem des Startfehlers von PHPStudy MySQL unter Windows

Einen Fehler melden Der Apache\Nginx-Dienst wurde...

WeChat-Applet implementiert Formularüberprüfung

Validierung des WeChat-Applets-Formulars. Zu Ihre...

So verwenden Sie die Zusatzfunktionen von Vuex

Inhaltsverzeichnis Kartenstaat Kartengetter Karte...

Die Bilder in HTML werden direkt durch base64-kodierte Strings ersetzt

Kürzlich stieß ich auf eine Webseite, die zwar Bil...

Klasse in Front-End-JavaScript

Inhaltsverzeichnis 1. Klasse 1.1 Konstruktor() 1....

Detaillierter Prozess zum Dekomprimieren und Installieren von mysql5.7.17 zip

1. Adresse herunterladen https://dev.mysql.com/do...

Implementierung der DOM-Operation in React

Inhaltsverzeichnis Vorherige Wörter Anwendungssze...

Detaillierte Schritte zur Installation des NERDTree-Plugins in Vim unter Ubuntu

NERDTree ist ein Dateisystembrowser für Vim. Mit ...