In diesem Artikel werde ich libMerge beschreiben, ein Python 3.x-Skript, das ich erstellt habe. libMerge bietet die Möglichkeit, Funktionsdefinitionen in der Bash-Bibliothek in ShellScript zusammenzuführen. Um genau zu sein, wird nur der Definitionsteil der in Script verwendeten Funktion aus der Bash-Bibliothek extrahiert. Erstellen Sie ein neues Skript, das "extrahierte Funktion + ursprünglicher Skriptinhalt" beschreibt.
Der Grund für die Erstellung von libMerge ist folgender.
Übrigens im Jahr 2005 in dem Artikel "shsubrmerge (CodeZine) zum Teilen und Zusammenführen von Shell-Skripten" Ein Skript mit fast derselben Funktion wird veröffentlicht. Es ist eine Neuerfindung der Räder. Darüber hinaus scheint es kein berühmtes Paket mit gleichwertiger Funktion zu geben Es wird erwartet, dass keine Nachfrage besteht. ~~ Es ist gut, weil ich mein Problem lösen kann (・ Wort ・) ~~
Da es auf Github veröffentlicht ist, können Sie es durch das folgende Verfahren erhalten (Debian-Annahme). Das Installationsverzeichnis von libMerge befindet sich unter "/ usr / local / bin /".
$ git clone https://github.com/nao1215/BashScriptsCompilation.git -b master
$ cd BashScriptsCompilation
$ sudo ./installScripts #Installationsskript
Da anscheinend nur wenige Leute eine Bash-Bibliothek haben, haben wir eine Beispielbibliothek, bashLib, vorbereitet. Mit dem obigen Installationsverfahren wird auch bashLib installiert.
Die in bashLib vorhandenen Funktionen sind wie folgt.
Funktionsname | Erläuterung |
---|---|
errMsg | Fehlermeldung wird in der Standardausgabe rot angezeigt |
warnMsg | Zeigen Sie die Fehlermeldung in schwarzer Schrift auf der Standardausgabe an |
checkArgc | Überprüfen Sie die Anzahl der Argumente |
isFile | Überprüfen Sie, ob die Datei vorhanden ist |
isDir | Überprüfen Sie, ob das Verzeichnis vorhanden ist |
isSubshell | Skript ist"source"Überprüfen Sie, ob es vom Befehl ausgeführt wird |
isNumeric | Überprüfen Sie, ob die Variable quantifiziert ist |
isNull | Variable(String)Überprüfen Sie, ob Null ist |
isRoot | Überprüfen Sie, ob der Benutzer root ist |
++ | Variable(Numerischer Wert)Zuwachs |
-- | Variable(Numerischer Wert)Dekrement |
AplusB | Fügen Sie der Variablen den angegebenen Wert hinzu |
AminusB | Subtrahieren Sie den angegebenen Wert von der Variablen |
_sum | Variable(Numerischer Wert)Hinzufügen |
makeDir | Erstellen Sie nach verschiedenen Bestätigungen ein Verzeichnis |
makeEmptyFile | Erstellen Sie nach verschiedenen Bestätigungen eine 0-Byte-Datei |
getLineNum | Ermitteln Sie die Anzahl der Zeilen in der Datei |
dos2unix | Konvertieren Sie Dateien vom Windows-Format in das Unix-Format |
Möglichkeit | Erläuterung |
---|---|
-l(--lib) | Beschreiben Sie den Pfad zur Bash-Bibliothek. |
-s(--script) | Zu einem Skript, das eine Funktionsdefinition in der Bibliothek geben möchte Beschreibe den WEG. |
-o(--output) | Skript, das die Funktionsdefinition veröffentlicht hat(Erstelle neu)Name Wenn Sie es ändern möchten, geben Sie den Dateinamen ein. (Standard:"m_<original_scriptname>)" |
Bereiten Sie als Beispiel das folgende Beispielskript (sample.sh) vor. In sample.sh werden makeDir () und errMsg () verwendet, die in "/ usr / local / bin / bashLib" definiert sind. Um diese Funktionen nutzen zu können, müssen Sie die Bibliothek in den Befehl "source" aufnehmen.
sample.sh
#!/bin/bash
# Description : Sample Script
source /usr/local/bin/bashLib #Bibliothek enthalten
makeDir "dir" #Bibliotheksfunktion
errMsg "Sample" #Das gleiche wie oben
Ausführungsergebnis.
$ ./sample.sh
make directory dir
Sample
Verwenden Sie libMerge, um der obigen sample.sh eine Funktionsdefinition hinzuzufügen. Anstatt die Funktionsdefinition direkt in sample.sh einzufügen, wird außerdem ein neues Skript mit dem Namen m_sample.sh generiert. Der Name des neuen Skripts kann hier mit der Option "-o" geändert werden.
$ ls
sample.sh
$ libMerge -s sample.sh -l /usr/local/bin/bashLib
$ ls
m_sample.sh sample.sh
Die generierte m_sample.sh lautet wie folgt. Die Funktionsdefinition wird unter dem Script-Header eingefügt und nur die in Script (sample.sh) verwendete Funktionsdefinition wird veröffentlicht.
m_sample.sh
#!/bin/bash
# Description : Sample Script
function errMsg() {
local message="$1"
echo -n -e "\033[31m\c" # Escape sequence to make text color red
echo "${message}"
echo -n -e "\033[m\c" # Escape sequence to restore font color
}
function makeDir() {
local dir_path="$1"
checkArgc "$#"
if [ -d "${dir_path}" ]; then
echo "Directory "${dir_path}" already exists. Not make it."
else
mkdir -p $1
if [ "$?" = 0 ]; then
echo "make directory "${dir_path}""
fi
fi
}
source /usr/local/bin/bashLib #Bibliothek enthalten
makeDir "dir"
errMsg "Sample"
Das Folgende ist eine Übersicht über den libMerge-Prozess.
Limitation
"Da das Ziel für 2017" Paketerstellung (C-Sprache) "ist, implementieren wir libMerge in C-Sprache." Ich habe zum Zeitpunkt des Entwurfs (am 17. Februar 2011 geschlafen) über so etwas nachgedacht, aber ich habe es in Python implementiert und es war die richtige Antwort.
Der Grund, warum es schwierig ist, Bash in eine Bibliothek zu verwandeln, ist "Fehlender Rückgabewert" "Die Art von Bash, bei der Umleitungsrohre voll genutzt werden" Ich habe es diesmal mit der Erstellung von libMerge und bashLib erlebt. Die Vorteile der Erstellung einer Bibliothek sind nur "Verbesserung der Lesbarkeit eines Liners (Shell Art)" und "Integration der Vorlagenverarbeitung". Wenn Sie versuchen, eine gute Bibliothek zu erstellen, die mehr verlangt, sind Sie wahrscheinlich festgefahren.
Recommended Posts