Make launcher find python binary
This commit is contained in:
parent
32aa475903
commit
53eb3851d1
18
bin/dotbot
18
bin/dotbot
|
@ -1,4 +1,20 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
# This is a valid shell script and also a valid Python script. When this file
|
||||||
|
# is executed as a shell script, it finds a python binary and executes this
|
||||||
|
# file as a Python script, passing along all of the command line arguments.
|
||||||
|
# When this file is executed as a Python script, it loads and runs Dotbot. This
|
||||||
|
# is useful because we don't know the name of the python binary.
|
||||||
|
|
||||||
|
''':' # begin python string; this line is interpreted by the shell as `:`
|
||||||
|
which python3 >/dev/null 2>&1 && exec python3 "$0" "$@"
|
||||||
|
which python >/dev/null 2>&1 && exec python "$0" "$@"
|
||||||
|
which python2 >/dev/null 2>&1 && exec python2 "$0" "$@"
|
||||||
|
>&2 echo "error: cannot find python"
|
||||||
|
return 1
|
||||||
|
'''
|
||||||
|
|
||||||
|
# python code
|
||||||
|
|
||||||
import sys, os
|
import sys, os
|
||||||
|
|
||||||
|
|
58
test/tests/find-python-executable.bash
Normal file
58
test/tests/find-python-executable.bash
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
test_description='can find python executable with different names'
|
||||||
|
. '../test-lib.bash'
|
||||||
|
|
||||||
|
# the test machine needs to have a binary named `python`
|
||||||
|
test_expect_success 'setup' '
|
||||||
|
mkdir ~/tmp_bin &&
|
||||||
|
(
|
||||||
|
IFS=:
|
||||||
|
for p in $PATH; do
|
||||||
|
find $p -maxdepth 1 -mindepth 1 -exec sh -c \
|
||||||
|
'"'"'ln -sf {} $HOME/tmp_bin/$(basename {})'"'"' \;
|
||||||
|
done
|
||||||
|
) &&
|
||||||
|
rm -f ~/tmp_bin/python &&
|
||||||
|
rm -f ~/tmp_bin/python2 &&
|
||||||
|
rm -f ~/tmp_bin/python3
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_failure 'run' '
|
||||||
|
PATH="$HOME/tmp_bin" run_dotbot <<EOF
|
||||||
|
[]
|
||||||
|
EOF
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'setup 2' '
|
||||||
|
touch ~/tmp_bin/python &&
|
||||||
|
chmod +x ~/tmp_bin/python &&
|
||||||
|
cat >> ~/tmp_bin/python <<EOF
|
||||||
|
#!$HOME/tmp_bin/sh
|
||||||
|
exec $(which python)
|
||||||
|
EOF
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'run 2' '
|
||||||
|
PATH="$HOME/tmp_bin" run_dotbot <<EOF
|
||||||
|
[]
|
||||||
|
EOF
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'setup 3' '
|
||||||
|
mv ~/tmp_bin/python ~/tmp_bin/python2
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'run 3' '
|
||||||
|
PATH="$HOME/tmp_bin" run_dotbot <<EOF
|
||||||
|
[]
|
||||||
|
EOF
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'setup 4' '
|
||||||
|
mv ~/tmp_bin/python2 ~/tmp_bin/python3
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'run 4' '
|
||||||
|
PATH="$HOME/tmp_bin" run_dotbot <<EOF
|
||||||
|
[]
|
||||||
|
EOF
|
||||||
|
'
|
Loading…
Reference in a new issue