Подсмотрел в какой-то утилите в Ubuntu следующее решение.
#! /bin/sh
"""true"
if command -v python3 > /dev/null; then
exec python3 "$0" "$@"
else
exec python "$0" "$@"
fi
exit $?
"""
Code language: Bash (bash)
Это решение подходит только для пользователей *nix-based систем.
Смысл в том, что python воспринимает команды между тройными кавычками как комментарий. А интерпретатор bash воспринимает это как допустимый код и исполняет его вплоть до команды exit $?.