Jaki niezależny od platformy sposób znalezienia katalogu powłoki wykonywalnej w skrypcie powłoki?

Zgodnie z POSIX:

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html

są przypadki, w których nie jest to oczywiste. Na przykład:

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.

Mój Bash 4.x nie stosuje się do tej opcjonalnej zasady (ze względu na obawy związane z bezpieczeństwem?), Więc nie mogę sprawdzić, jak to jest w prawdziwym życiu ...

Jaki niezależny od platformy sposób znalezienia katalogu powłoki wykonywalnej w skrypcie powłoki?

PS. Równieżdirname $0 Sprawa zakończy się niepowodzeniem:

#!/bin/sh
echo $0
dirname $0

kiedy ty:

$ sh runme.sh
runme.sh
.

Potrzebujesz czegoś takiego:

CMDPATH=`cd $(dirname $0); echo $PWD`

Aby kod był zależny tylko od wbudowanych funkcji powłoki, przepisuję kod do:

PREVPWD=$PWD
cd ${0%${0##*/}}.
CMDPATH=$PWD
cd $PREVPWD

Wygląda to brzydko, ale nie wymaga widelca żadnych plików wykonywalnych ...

questionAnswers(2)

yourAnswerToTheQuestion