Какой платформо-независимый способ найти каталог исполняемого файла оболочки в сценарии оболочки?
Согласно 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.
Мой Bash 4.x не работаетследовать этому необязательному правилу (из-за проблем с безопасностью ??), чтобы я могпроверить, как это будет в реальной жизни ...
Какой платформо-независимый способ найти каталог исполняемого файла оболочки в сценарии оболочки?
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
Это выглядит некрасиво, но нене требуются форк любые исполняемые файлы ...