2022-08-01 03:02:31 +08:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
# Modern Linux and macOS systems commonly only have a thing called `python3` and
|
|
|
|
# not `python`, while Windows commonly does not have `python3`, so we cannot
|
|
|
|
# directly use python in the x.py shebang and have it consistently work. Instead we
|
|
|
|
# have a shell script to look for a python to run x.py.
|
|
|
|
|
|
|
|
set -eu
|
|
|
|
|
2023-05-04 01:32:39 +08:00
|
|
|
# syntax check
|
2023-09-26 03:22:20 +08:00
|
|
|
sh -n "$0"
|
2023-05-04 01:32:39 +08:00
|
|
|
|
2022-08-01 03:02:31 +08:00
|
|
|
realpath() {
|
2023-10-14 22:53:33 +08:00
|
|
|
local path="$1"
|
|
|
|
if [ -L "$path" ]; then
|
|
|
|
readlink -f "$path"
|
|
|
|
elif [ -d "$path" ]; then
|
|
|
|
(cd -P "$path" && pwd)
|
2022-08-01 03:02:31 +08:00
|
|
|
else
|
2023-10-14 22:53:33 +08:00
|
|
|
echo "$(realpath "$(dirname "$path")")/$(basename "$path")"
|
2022-08-01 03:02:31 +08:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
xpy=$(dirname "$(realpath "$0")")/x.py
|
|
|
|
|
|
|
|
# On Windows, `py -3` sometimes works. We need to try it first because `python3`
|
|
|
|
# sometimes tries to launch the app store on Windows.
|
|
|
|
for SEARCH_PYTHON in py python3 python python2; do
|
|
|
|
if python=$(command -v $SEARCH_PYTHON) && [ -x "$python" ]; then
|
|
|
|
if [ $SEARCH_PYTHON = py ]; then
|
|
|
|
extra_arg="-3"
|
|
|
|
else
|
|
|
|
extra_arg=""
|
|
|
|
fi
|
|
|
|
exec "$python" $extra_arg "$xpy" "$@"
|
|
|
|
fi
|
|
|
|
done
|
2022-10-13 16:20:39 +08:00
|
|
|
|
|
|
|
python=$(bash -c "compgen -c python" | grep '^python[2-3]\.[0-9]\+$' | head -n1)
|
|
|
|
if ! [ "$python" = "" ]; then
|
|
|
|
exec "$python" "$xpy" "$@"
|
|
|
|
fi
|
|
|
|
|
2022-08-01 03:02:31 +08:00
|
|
|
echo "$0: error: did not find python installed" >&2
|
|
|
|
exit 1
|