Внимание, сейчас будем упарываться. Давно не упарывались. Камон в нашу ламповую лабораторию. Сразу не сбегай, возможно узнаешь что-то новенькое или окончательно засвистит фляга.

Для начала давай создадим две подопытные папки:

mkdir /tmp/{.libs,.bashdays}

Теперь скопируем в них нативную утилиту cp (copy):

cp "$(which cp)" /tmp/.libs/lt-test
cp "$(which cp)" /tmp/.bashdays/lt-test

Скопировали, файлы назвали lt-test.

Далее запускаем:

/tmp/.libs/lt-test example.txt .

В параметрах указываем файл, которого нет. На экран вывелось:

test: cannot stat 'example.txt': No such file or directory

А теперь запускаем:

/tmp/.bashdays/lt-test example.txt .

На экран получаем:

/tmp/.bashdays/lt-test: cannot stat 'example.txt': No such file or directory

Ну и внимательно сравниваем результаты:

1. test: cannot stat 'example.txt'
2. /tmp/.bashdays/lt-test: cannot stat 'example.txt'

Хм, всё же идентично, почему тогда результаты разные? В первом случае кусок названия запускаемого файла lt-test вообще обрезан.

В первом случае путь и префикс lt был обрезан, потому что запуск утилиты был выполнен из директории .libs.

Всё дело в функции set_program_name которую пихают в ГНУтые утилиты и программы. Эта функция модифицирует путь и имя утилиты если запуск был произведен из папки .libs, а затем присваивает результат переменным.

А потом эти переменные используются для вывода при ошибках или при выводе страницы хелпа.

Ну и на закуску тест:

/tmp/.libs/lt-test --help | head  -1
/tmp/bashdays/lt-test --help | head  -1

Результат тот же:

1. bash: /tmp/.libs/lt-test --help
2. bash: /tmp/bashdays/lt-test --help
Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Вся эта байда в программах нужна для корректного отображения имени, при использовании ГНУТого инструмента libtool.

Как это обрабатывается на самом деле, можешь глянуть в нативном исходнике на СИ здесь, там и про префикс lt и про .libs всё прекрасно структурировано. А здесь можешь ознакомиться с развёрнутым комментарием на эту же тему.

Короче голову не грей, на этой неделе постараюсь подобным тебя больше не развлекать. Спасибо за внимание!