LINUX.ORG.RU

Как получить полный путь к исполняемому файлу?

 , , , ,


0

2

Пишу скрипт, он определяет какой архитектуры исполняемый файл и подставляет ему нужные библиотеки.

При помощи команды

readelf -h /usr/bin/programm_name | grep ELF32
получается определить что он 32 разрядной архитектуры. Но ведь пользователь введёт не полный путь к исполняемому файлу, а как чаще всего бывает просто его имя.

Как найти указанный в параметре исполняемый файл к которому не указан полный путь по переменной окружения?

Перемещено leave из talks

Ответ на: комментарий от portquest2016

Если скрипты в строго определенных директориях, то пропиши эти пути в самом скрипте.

Программу предполагается использовать примерно так:

скрипт программа [параметры передаваемые программе]

rezedent12 ☆☆☆
() автор топика

А как же революция?

dk-
()
Ответ на: комментарий от rezedent12

Я о том, что если «программы» могут лежать только в заранее заданной директории, то ты внутри скрипта можещь написать типа blabla /mydetermineddir/$1 [another params]

portquest2016
()
Ответ на: комментарий от rezedent12

есть ли готовый парсер на bash для разбора этой переменной и поиска?

ааааааааааааааа, кто там рядом живёт, стукните его по голове чем-нибудь тяжёлым!!!!1111

imul ★★★★★
()
Ответ на: комментарий от portquest2016

Как же вы задолбали!
pet / # mkdir /1
pet / # cp $(which wine) /1
pet / # ls /1
wine
pet / # echo ${PATH}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/6.2.0:/root/.local/bin:/root/bin
pet / # readelf -h $(env PATH=«${PATH}:/1» which wine) | grep ELF32
Класс: ELF32

which он как яндекс — найдёт всё, что нужно, главное правильно спросить

imul ★★★★★
()
Ответ на: комментарий от imul

че то тыы какую то пургу намел. Если добавить директорию в PATH, есен х, все отыщется. Че сказать то хотел? Зачем ты там с каким то копированием че-то делал?

portquest2016
()
Ответ на: комментарий от portquest2016

Че сказать то хотел?

Вот именно это сказать и хотел:

Если добавить директорию в PATH, есен х, все отыщется.
Зачем ты там с каким то копированием че-то делал?

Каталог надо было вперёд ставить.
pet / # mv /usr/bin/wine_ /usr/bin/wine
pet / # ls /usr/bin/wine
/usr/bin/wine
pet / # env PATH=«/1:${PATH}» which wine
/1/wine

Теперь понятно?

imul ★★★★★
()
Ответ на: комментарий от portquest2016

Какая разница, какое это отношение к вопросу имеет?

Непосредственное

imul ★★★★★
()
Ответ на: комментарий от portquest2016

Скрипт, которого нет в ${PATH} при его старте только по одному имени выполняться один фиг не будет.
Если при запуске задавать полное имя скрипта, то каталог в котором этот скрипт лежит считай известен и его можно добавить в переменную PATH
Что ещё тебе не понятно? Не стесняйся, спрашивай.

pet / # cat /1/bzzz.sh
#! /bin/bash

pwd
echo $(dirname $0)

pet / # /1/bzzz.sh
/
/1

pet / # bash /1/bzzz.sh
/
/1

pet / # env PATH=/1 /bin/bash bzzz.sh
/
/1/bzzz.sh: line 4: dirname: команда не найдена

pet / # env PATH=/1:${PATH} bash bzzz.sh
/
.

pet / # bzzz.sh
bash: bzzz.sh: команда не найдена

imul ★★★★★
()
Ответ на: комментарий от portquest2016

Да, я знаю.
Мне непонятно, что тебе не нравится в запуске which с новой переменной PATH для поиска?

imul ★★★★★
()
Ответ на: комментарий от portquest2016

Но ведь пользователь введёт не полный путь к исполняемому файлу, а как чаще всего бывает просто его имя.

В этом случае исполняемый файл лежит в каталоге, содержащемся в PATH. Иначе надо вводить полный путь абсолютный, или относительный (что легко через dirname привести к первой задаче).
Как бы других-то способов нет и усложнять ничего не надо.

Ладно, проехали.

Абсолютно согласен, всё что можно было уже сказать по теме, в этой теме сказал самый первый комментатор :D

PS: тему твою удалили про разум. ИМХО нет, чёткого критерия не будет.

imul ★★★★★
()
Последнее исправление: imul (всего исправлений: 1)
Ответ на: комментарий от no-dashi

Ненужно в квадрате.

С этим к топиксратеру %)

Nervous ★★★★★
()

Плохо быть тобой.

Xellos ★★★★★
()

В теме успело разгореться аж несколько флеймов, но никто не попенял за тех. вопрос в Talks? LOR скатился…

dexpl ★★★★★
()
Ответ на: комментарий от Harald

зачем тебе это вообще могло понадобиться?

Хочу запускающий скрипт apulse усовершенствовать что бы он автоматически определял какие библиотеки подставлять.

rezedent12 ☆☆☆
() автор топика
Ответ на: комментарий от portquest2016

Не, непонято, если исходить из вопроса ТС, как найти скрипт, которого нет в PATH. Ладно, забей, мне, видимо, не понять.

Вообще то наоборот, именно тот который есть в PATH

Что бы вместо

 apulse /usr/bin/skype %U 
писать
 apulse skype %U 

rezedent12 ☆☆☆
() автор топика
Ответ на: комментарий от Nervous

В чем, собственно, проблема? %)

не в этом.

rezedent12 ☆☆☆
() автор топика
Ответ на: комментарий от no-dashi

LD_LIBRARY_PATH=«/a/lib32:/a/lib64:/a:libarm:/a/libarm64»

А что можно в путь прописать и 64 разрядные и 32 разрядные библиотеки с одинаковыми именами и они не будут конфликтовать?

rezedent12 ☆☆☆
() автор топика
Ответ на: комментарий от Sociopsih

which имя програмы.

Спасибо.

Вы гуглить разучились или никогда не умели?

Видимо слишком мудрёно формулировал запрос.

rezedent12 ☆☆☆
() автор топика
Ответ на: комментарий от Deleted

А что там с автоматизацией мойки?

Нашёл пятивольтовые реле низкого тока.

rezedent12 ☆☆☆
() автор топика

Если в PATH - which.

Если не в PATH - то лучше добавить в PATH. Иначе очень долго.

Если хз где, то find.

Если хз где и надо быстро найти, то настраивается locatedb, и ищется командой locate, но тут нужно осторожно - может найтись много не того. Плюс обычно обновления раз в сутки, соответственно новые скрипты не найдёт, надо сутки подождать :)

slapin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.