Короче говоря, скрипт извлечет набор динамически разрешенных общих библиотек из двоичного файла bin/foo.so
, упомянутого в скрипте.
Команда, управляющая всем сценарием: ldd . Это разрешит и напечатает любые динамические зависимости для исполняемого файла.
например. это пример вывода (на Raspberry Pi, который был удобен, но вывод совместим):
ldd /bin/grep
linux-vdso.so.1 (0x7ef36000)
/usr/lib/arm-linux-gnueabihf/libarmmem.so (0x76f8b000)
libpcre.so.3 => /lib/arm-linux-gnueabihf/libpcre.so.3 (0x76efe000)
libdl.so.2 => /lib/arm-linux-gnueabihf/libdl.so.2 (0x76eeb000)
libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0x76dac000)
/lib/ld-linux-armhf.so.3 (0x76fa1000)
libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0x76d83000)
Таким образом, для каждого из имен в переменной LIBS_TO_COPY (например, pthread
в последней строке выше) будет найдена строка с префиксом lib
(например, libpthread
).
Каждая из этих совпадающих строк передается по каналу cut
, который выберет третье поле в строке (используя пробел в качестве разделителя) - т.е. разрешенный путь к этой библиотеке.
Затем эти разрешенные зависимости копируются в выбранный каталог.
Например, с echo
в сценарии без комментариев и bin/foo.so
переключено на /bin/grep
:
$ export LIBS_TO_COPY='pthread c dl'
$ bash libextract.bash
pthread : copying /lib/arm-linux-gnueabihf/libpthread.so.0 in libs
c : copying /lib/arm-linux-gnueabihf/libc.so.6 in libs
dl : copying /lib/arm-linux-gnueabihf/libdl.so.2 in libs
(Оболочки bash
и sh
дают одинаковый выход).