Почему этот простой bash-скрипт уничтожает мой компьютер?

Почему этот простой bash-скрипт уничтожает мой компьютер?

Что-то странное происходит с, казалось бы, безобидным скриптом, который у меня есть. Мне нужно скопировать ряд файлов в некоторые места в системе, и у меня есть следующий скрипт, чтобы сделать это.

#!/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

Скрипт получает файлы и местоположения из dependencies.txtфайла, содержимое которого:

/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

Если я закомментирую cp ${LIBRARY} ${LIB_PATH}строку, то получу:

Вывод скрипта

Так что я знаю, что получаю имена файлов и пути правильно. Это когда я раскомментирую строку cp ${LIBRARY} ${LIB_PATH}и запускаю скрипт, sudoскрипт уничтожает мою систему(кстати, это безвредно, так как я тестирую это на виртуальной машине). При этом экран просто становится черным, и мне приходится принудительно закрывать окно VM. Затем, когда я снова пытаюсь запустить VM, я получаю это:

Мертвая система

И мне придется полностью переустановить UBUNTU.

Интересно, почему это происходит, ведь я могу вручную выполнить команду cpв командной строке для каждого файла, и ничего плохого не произойдет, файлы просто копируются в места назначения.


РЕДАКТИРОВАТЬ:

Как указано в одном из комментариев и вПроблема XYПроблема, которую я пытаюсь решить, заключается в том, что я создаю на своей машине собственный модуль nodejs, который имеет node v12.18.1и который будет использоваться на машине с , node v 10.19.0и я абсолютно не могу обновить версию node на целевой машине или установить другие пакеты, которые включают зависимости.

При выполнении ldd mymodule.nodeя получаю:

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)

И вот почему я пытаюсь сделать то, что я пытаюсь сделать в этом вопросе. Так что настоящий вопрос здесь;Как мне включить эти зависимости вместе с .nodeмодулем, чтобы можно было развернуть его без необходимости обновления чего-либо на целевом устройстве?

Я бы предпочел объединить все это в модуль и иметь только один файл .node, который включает в себя все и не зависит от системных библиотек, но я не думаю, что это возможно, или возможно?

решение1

Вы можете попробовать еще раз, но создайте каталог "mkdir -p /usr/local/lib/nodejs" и установите LIBPATH на "export LIBPATH=/usr/local/lib/nodejs/". Однако я настоятельно рекомендую вам прочитать, как установить nodejs на Linux, прежде чем вы нажмете на курок. См. "https://github.com/nodejs/help/wiki/Installation#how-to-install-nodejs-via-binary-archive-on-linux", например, который выполняет установку в "/usr/local/lib/nodejs". Единственная тяжелая работа, которую вам нужно сделать после создания каталога, это загрузить двоичный файл и извлечь его в каталог "/usr/local/lib/nodejs"

Связанный контент