Warum zerstört dieses einfache Bash-Skript meinen Computer?

Warum zerstört dieses einfache Bash-Skript meinen Computer?

Mit einem scheinbar harmlosen Skript, das ich habe, passiert etwas Seltsames. Ich muss eine Reihe von Dateien an einige Stellen im System kopieren und habe dafür das folgende Skript.

#!/bin/bash

# Get all the files from the file
LINES=$(cat Release-Nodejs/dependencies.txt)

# Copy each file to its location as indicated in the file
for LINE in ${LINES}
do
    LIBRARY=$(basename ${LINE})
    LIBRARY=Release-Nodejs/${LIBRARY}
    LIB_PATH=$(dirname ${LINE})
    echo -e "Copying \e[38;5;10m${LIBRARY}\e[0m to \e[38;5;11m${LIB_PATH}\e[0m"
    cp ${LIBRARY} ${LIB_PATH}
done

Das Skript ruft die Dateien und Speicherorte aus der dependencies.txtDatei ab, deren Inhalt lautet:

/usr/lib/x86_64-linux-gnu/libnode.so.72
/lib/x86_64-linux-gnu/libgcc_s.so.1
/lib/x86_64-linux-gnu/libpthread.so.0
/lib/x86_64-linux-gnu/libc.so.6
/lib/x86_64-linux-gnu/libz.so.1
/usr/lib/x86_64-linux-gnu/libbrotlidec.so.1
/usr/lib/x86_64-linux-gnu/libbrotlienc.so.1
/usr/lib/x86_64-linux-gnu/libcares.so.2
/usr/lib/x86_64-linux-gnu/libnghttp2.so.14
/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
/usr/lib/x86_64-linux-gnu/libssl.so.1.1
/usr/lib/x86_64-linux-gnu/libicui18n.so.67
/usr/lib/x86_64-linux-gnu/libicuuc.so.67
/lib/x86_64-linux-gnu/libdl.so.2
/usr/lib/x86_64-linux-gnu/libstdc++.so.6
/lib/x86_64-linux-gnu/libm.so.6
/usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1
/usr/lib/x86_64-linux-gnu/libicudata.so.67

Wenn ich die Zeile auskommentiere, cp ${LIBRARY} ${LIB_PATH}erhalte ich:

Skriptausgabe

Ich weiß also, dass ich die Dateinamen und Pfade richtig bekomme. Wenn ich die cp ${LIBRARY} ${LIB_PATH}Zeile auskommentiere und das Skript sudodamit ausführe, zerstört das Skript mein System(das ist übrigens harmlos, weil ich das auf einer VM teste). Wenn ich das mache, wird der Bildschirm einfach schwarz und ich muss das VM-Fenster zwangsweise schließen. Wenn ich dann versuche, die VM erneut auszuführen, erhalte ich Folgendes:

Totes System

Und ich muss UBUNTU komplett neu installieren.

Ich frage mich, warum dies passiert, da ich es cpfür jede Datei manuell in der Befehlszeile ausführen kann und nichts Schlimmes passiert, die Dateien werden einfach an ihre Ziele kopiert.


BEARBEITEN:

Wie in einem der Kommentare und in derXY-Problem, das Problem, das ich zu lösen versuche, besteht darin, dass ich auf meiner Maschine ein natives Node.JS-Modul erstelle, das über verfügt node v12.18.1und das auf einer Maschine mit verwendet werden soll, node v 10.19.0und ich kann die Node-Version auf der Zielmaschine absolut nicht aktualisieren oder andere Pakete installieren, die die Abhängigkeiten enthalten.

Bei der Ausführung ldd mymodule.nodeerhalte ich:

linux-vdso.so.1 (0x00007ffe878c6000)
libnode.so.72 => /usr/lib/x86_64-linux-gnu/libnode.so.72 (0x00007f9bd34fb000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f9bd34e0000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9bd34be000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9bd32d4000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9bd5b1e000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f9bd32b7000)
libbrotlidec.so.1 => /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1 (0x00007f9bd32a9000)
libbrotlienc.so.1 => /usr/lib/x86_64-linux-gnu/libbrotlienc.so.1 (0x00007f9bd3215000)
libcares.so.2 => /usr/lib/x86_64-linux-gnu/libcares.so.2 (0x00007f9bd31fe000)
libnghttp2.so.14 => /usr/lib/x86_64-linux-gnu/libnghttp2.so.14 (0x00007f9bd31d2000)
libcrypto.so.1.1 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f9bd2ef5000)
libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f9bd2e61000)
libicui18n.so.67 => /usr/lib/x86_64-linux-gnu/libicui18n.so.67 (0x00007f9bd2b4f000)
libicuuc.so.67 => /usr/lib/x86_64-linux-gnu/libicuuc.so.67 (0x00007f9bd2961000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9bd295b000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f9bd277a000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9bd262b000)
libbrotlicommon.so.1 => /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1 (0x00007f9bd2608000)
libicudata.so.67 => /usr/lib/x86_64-linux-gnu/libicudata.so.67 (0x00007f9bd0aed000)

Und deshalb versuche ich, das zu tun, was ich in dieser Frage versuche. Die eigentliche Frage hier ist also:Wie kann ich diese Abhängigkeiten zusammen mit dem .nodeModul einbinden, sodass ich es bereitstellen kann, ohne etwas auf dem Ziel aktualisieren zu müssen?

Ich würde es vorziehen, all dies in das Modul einzubinden und nur eine .node-Datei zu haben, die alles enthält und nicht von Systembibliotheken abhängt, aber ich glaube nicht, dass das möglich ist, oder doch?

Antwort1

Sie könnten es noch einmal versuchen, aber erstellen Sie das Verzeichnis „mkdir -p /usr/local/lib/nodejs“ und setzen Sie Ihren LIBPATH auf „export LIBPATH=/usr/local/lib/nodejs/“. Ich empfehle Ihnen jedoch dringend, zu lesen, wie Sie nodejs unter Linux installieren, bevor Sie loslegen. Siehe beispielsweise „https://github.com/nodejs/help/wiki/Installation#how-to-install-nodejs-via-binary-archive-on-linux“ – dort wird die Installation in „/usr/local/lib/nodejs“ durchgeführt. Die einzige schwere Arbeit, die Sie nach dem Erstellen des Verzeichnisses erledigen müssen, ist das Herunterladen der Binärdatei und das Entpacken in das Verzeichnis „/usr/local/lib/nodejs“.

verwandte Informationen