В соответствии с POSIX:
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html
есть случаи, когда это не очевидно. Например:
If the file is not in the current working directory,
the implementation may perform a search for an executable
file using the value of PATH, as described in Command Search and Execution.
My Bash 4.x не следует этому необязательному правилу (из-за проблем с безопасностью?), поэтому я не могу проверить, как это происходит в реальной жизни...
Какой платформенный независимый способ найти каталог исполняемого файла оболочки в оболочке script?
PS. Также сбой dirname $0
:
#!/bin/sh
echo $0
dirname $0
когда вы:
$ sh runme.sh
runme.sh
.
Итак, вам нужно что-то вроде:
CMDPATH=`cd $(dirname $0); echo $PWD`
Чтобы код зависел только от встроенных возможностей оболочки, я переписываю код:
PREVPWD=$PWD
cd ${0%${0##*/}}.
CMDPATH=$PWD
cd $PREVPWD
Это выглядит уродливым, но не требует fork любых исполняемых файлов...