LINUX.ORG.RU

как работает bash?

 


0

1

Здравствуйте, кто знает, как еще bash ищет исполняемый файл команды кроме алисов и путей?

Суть проблемы - не запускается команда, присутствующая в каталоге, прописанном в $PATH. Баш упорно пытается запустить ее только из /usr/bin/ и «не желает замечать» в других каталогах. Вот пример:

$ nim
bash: /usr/bin/nim: Нет такого файла или каталога
$ nimfuck
bash: nimfuck: команда не найдена
$ alias -p
alias :q='exit'
alias ls='ls --color=auto'
alias p2='source /home/ib/.pyenv/p2/bin/activate'
alias p3='source /home/ib/.pyenv/p3/bin/activate'
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/home/ib/bin
$ ls /home/ib/bin/nim
/home/ib/bin/nim
$
$ /home/ib/bin/nim -v
Nim Compiler Version 0.11.3 (2015-06-16) [Linux: amd64]
Copyright (c) 2006-2015 by Andreas Rumpf

git hash: 116a60caebec32e4e20e9e4673ff90d2ae5c72f8
active boot switches: -d:release
$ nim -v
bash: /usr/bin/nim: Нет такого файла или каталога
$ 

Пытаюсь запустить скомпилированный из исходников nim, расположенный в домашней директории, а Баш (после удаления системного пакета nim) ищет его только на старом месте.

Конечно, можно через sudo прибить софтлинк в /usr/bin/nim. Но хочется понять суть.


file /usr/bin/nim

ls -l /usr/bin/nim

Stil ★★★★★ ()

а Баш (после удаления системного пакета nim) ищет его только на старом месте.

Баш ищет в PATH.

А судя по

Нет такого файла или каталога

У тебя либо нет прав, либо он в принципе незапускабельный.

Stil ★★★★★ ()

bash: /usr/bin/nim: Нет такого файла или каталога

Ну, похоже, что баш-то как раз его нашёл. Проблема, наверное, в правах.

CYB3R ★★★★★ ()

Проблема запуска решилась как всегда - невнимательность. Надо было добавить в конце двоеточие в переменную $PATH, иначе указанный последним в строке путь игнорируется.

Но вопрос остался - почему в одном случае bash сказал: «/usr/bin/nim: Нет такого файла или каталога», а в другом - просто «команда не найдена»?

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

да нет его там, я проверял - в том то и закавыка:

$ file /usr/bin/nim
/usr/bin/nim: cannot open `/usr/bin/nim' (No such file or directory)
$ ls -l /usr/bin/nim
ls: невозможно получить доступ к /usr/bin/nim: Нет такого файла или каталога
$ 
bigov ()
Ответ на: комментарий от CYB3R

вот под рутом:

# file /usr/bin/nim
/usr/bin/nim: cannot open `/usr/bin/nim' (No such file or directory)

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

Ну это кеш команд, наверное. Очистите его через

hash -r

ValdikSS ★★★★★ ()

Ты должен ложить такие вещи либо в /usr/local/bin/ если это скрипт, либо в /opt/ в отдельный каталог если это огромная софтина с кучей библиотек и ресурсов. То, что ты сделал не совсем корректно. И дурная практика. Также еще иногда добавляют PATH в .bashrc (если у тебя нет доступа на запись), но опять же в твоем случае я исхожу из того что /home смонтирован с noexec, потому-что это достаточно распространенная практика.

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

Проблема запуска решилась как всегда - невнимательность. Надо было добавить в конце двоеточие в переменную $PATH, иначе указанный последним в строке путь игнорируется.

Нет, просто для применения этой настройки bash скорее всего был перезапущен, что сбросило его кеш, который отображает имена команд на файлы (для ускорения этой частой процедуры).

ValdikSS правильно написал. Пример:

@[~]$ mv bin/7z{,_}
@[~]$ 7z_
# ...
@[~]$ mv bin/7z{_,}
@[~]$ 7z_
bash: /home/xaizek/bin/7z_: No such file or directory
@[~]$ type 7z_
7z_ is hashed (/home/xaizek/bin/7z_)
xaizek ★★★★★ ()
Ответ на: комментарий от xaizek

Спасибо! Именно это я искал, ибо это и оказалась СУТЬ. ;-)

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

в Linux не «дурной» или «правильной» практики. Тут есть абсолютная свобода и надо только понимать, как этой свободой пользоваться.

Но в любом случае, спасибо за отклик.

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

Абсолютной свободы нет, даже GPL несет за собой определенные ограничения. Не стоит лишний раз биться головой об стенку, даже если входит в часть «свободы».

anonymous_sama ★★★★★ ()
Последнее исправление: anonymous_sama (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.