mac installed python shebang

python - installed - shebang: usar el intérprete en relación con la ruta del script



python path windows 10 (2)

Hay un conjunto saludable de scripts shebang de varias líneas en esta página para muchos idiomas, por ejemplo:

#!/bin/sh "exec" "`dirname $0`/python" "$0" "$@" print copyright

Y si desea un shebang de una línea, esta respuesta (y pregunta) explica el problema en los detalles y sugiere los siguientes enfoques utilizando scripts adicionales dentro del shebang:

Utilizando AWK

#!/usr/bin/awk BEGIN{a=ARGV[1];sub(/[a-z_.]+$/,"python",a);system(a"/t"ARGV[1])}

Usando perl

#!/usr/bin/perl -e$_=$ARGV[0];exec(s//w+$/python/r,$_)

Intento construir scripts que funcionen en todas partes y siempre. Para esto utilizo un python personalizado, que siempre está en el directorio principal en relación con el script.

De esta manera, podría cargar mi paquete en una memoria USB y funcionaría en todas partes, independientemente de dónde esté montado el dispositivo y de si Python está instalado o no.

Sin embargo, cuando uso

#!../python

entonces funciona solo cuando el script se invoca desde su directorio, lo que por supuesto no es aceptable.

¿Hay alguna manera de hacer esto o es imposible en el actual mecanismo de shebang?


Para otros que encuentren esta pregunta mientras buscan una solución portátil para la línea de hashbang de python, y encontrar el comando AWK anterior no funciona al pasar varios argumentos, use el siguiente.

#!/usr/bin/awk BEGIN{a=ARGV[1];b="";for(i=1;i<ARGC;i++){b=b" /""ARGV[i]"/"";}sub(/[a-z_./-]+$/,"python",a);system(a"/t"b)}

Para cambiar todas las líneas de hashbang de scripts en el directorio actual, puede ejecutar lo siguiente.

sed -i ''1 s|^#!.*|#!/usr/bin/awk BEGIN{a=ARGV[1];b="";for(i=1;i<ARGC;i++){b=b" /""ARGV[i]"/"";}sub(/[a-z_./-]+$/,"python3.5",a);system(a"//t"b)}|'' *