TGViewer
Bash Days | Linux | DevOps Bash Days | Linux | DevOps @bashdays · 23.6K subscribers
Post #284 11.7K
Внимание, сейчас будем упарываться. Давно не упарывались. Камон в нашу ламповую лабораторию. Сразу не сбегай, возможно узнаешь что-то новенькое или окончательно засвистит фляга.

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

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, а затем присваивает результат переменным.

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

В GNU утилитах, функция set_program_name используется для установки имени программы, которое будет использоваться в выводе сообщений об ошибках, помощи и других местах, где требуется указание имени программы.


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

/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


Вся эта байда в программах нужна для корректного отображения имени, при использовании ГНУТого инструмента libtool.

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

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

tags: #linux
—
💩 @bashdays
More from @bashdays
  1. Sep 30, 2026↗️ Для всех, кто строит 15 октября Cloud․ru соберет инженеров, которые строят и эксплуатир…
  2. Sep 29, 2026Самый жаркий холивар в команде — это не systemd, а какие заказать роллы на всю команду. Од…
  3. Sep 24, 2026Post #1565
  4. Sep 23, 2026Здрасти приехали, решил я в кой-то веке воспользоваться услугами Codex, создал аккаунт, по…
  5. Sep 22, 2026Всем привет, с вами TagdTagd. Сегодня опять поднимем тему архивов, но немного с другой сто…
  6. Sep 15, 2026Всем привет, с вами TagdTagd. И это вторая часть. Практическая. С первой частью можешь озн…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →