LINUX.ORG.RU

Запуск из текущей директории без ./

 


0

2

Всегда предполагал, что по дефолту для запуска программы из директории, не прописанной в $PATH, необходимо указывать путь, т.е. для текущей - ./script а сейчас столкнулся с тем, что срабатывает запуск без указания пути

~>uname -a
SunOS srvap112vm 5.10 Generic_147441-04 i86pc i386 i86pc
~>cat /etc/release
                    Oracle Solaris 10 8/11 s10x_u10wos_17b X86
  Copyright (c) 1983, 2011, Oracle and/or its affiliates. All rights reserved.
                            Assembled 23 August 2011
~>echo $0
-bash
~>echo $PATH
/export/home/oracle/product/11g/bin:/usr/bin:
~>svcadm
-bash: svcadm: command not found
~>cd /usr/sbin/
/usr/sbin>which svcadm
./svcadm
/usr/sbin>svcadm
Usage: svcadm [-v] [cmd [args ... ]]

почему это работает?

Нашел - /export/home/oracle/product/11g/bin:/usr/bin: Если убрать : в конце, то все работает как надо -

~>export PATH=/usr/bin
~>cd /usr/sbin/
/usr/sbin>svcadm
-bash: svcadm: command not found

Хотя мне все равно непонятно, как пустое значение после разделителя позволяет запускать из текущей директории Если бы было /usr/bin:./ , то все понятно, а так...

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

> Хотя мне все равно непонятно, как пустое значение после разделителя позволяет запускать из текущей директории Если бы было /usr/bin:./ , то все понятно, а так...

>/usr/bin:./

AFAIK, просто ".", а не "./"

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

Думаю, он перебирает подстановки наподобие вот этого : $path = $path/ ; if [ -x $path$bin ]; then exec $path$bin; endif;

($path - каждый каталог из $PATH. Лень было полностью писать, но думаю, мысль ясна)

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

Ага, я сначала : на конце не заметил

Маны, оказывается, нелишним было почитать

The shell parameter PATH defines the search path for the directory containing the command. Alternative directory names are separated by a colon (:). The default path is /usr/bin. The current directory is specified by a null path name, which can appear immediately after the equal sign, between two colon delimiters anywhere in the path list, or at the end of the path list.

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