libquery=/lib32/libgcc_s.so.1; if [ `nm -D $libquery | sed -n '/[0-9A-Fa-f]\{8,\}/ {p; q;}' | grep "[0-9A-Fa-f]\{16\}" | wc -l` == 1 ]; then echo "$libquery is a 64 bit library"; else echo "$libquery is a 32 bit library"; fi;
Эта команда определяет, является ли указанная общая библиотека (shared library) 32-битной или 64-битной. Она выполняет следующие шаги:
1. libquery=/lib32/libgcc_s.so.1;
— Задает переменную libquery
, указывая путь к общей библиотеке.
2. if [
nm -D $libquery | sed -n ‘/[0-9A-Fa-f]\{8,\}/ {p; q;}’ | grep «[0-9A-Fa-f]\{16\}» | wc -l == 1 ];
— Это условие проверяет результат выполнения следующей последовательности команд:
— nm -D $libquery
— Эта команда извлекает информацию о символах из общей библиотеки.
— sed -n '/[0-9A-Fa-f]\{8,\}/ {p; q;}'
— С помощью sed
выбираются строки, содержащие хексадецимальные числа, представляющие адреса символов.
— grep "[0-9A-Fa-f]\{16\}"
— Фильтрует строки, содержащие 16-значные хексадецимальные числа (предполагается, что это адреса 64-битных символов).
— wc -l
— Подсчитывает количество найденных строк.
3. then echo "$libquery is a 64 bit library";
— Если условие истинно (то есть найден ровно один 16-значный хексадецимальный адрес), выводит сообщение, указывающее, что библиотека является 64-битной.
4. else echo "$libquery is a 32 bit library";
— Если условие ложно (ноль или более одного 16-значного адреса), выводит сообщение, указывающее, что библиотека является 32-битной.
Альтернативы: Можно использовать утилиту file
для определения архитектуры библиотеки, что может быть более простым способом.