Ubuntu Python ligne shebang ne fonctionne pas
Pas pu obtenir ligne shebang de travail dans Ubuntu pour le script python. Je ne reçois une commande ne trouve pas d'erreur à chaque fois.
test.py
#!/usr/bin/env python
print ('!')
Couru
:which python
/usr/bin/python
Joué avec différents emplacements pour python dans le shebang mais pas de chance, y compris ce qui a été fourni par lequel python. Des conseils sur la façon de résoudre ce problème?
Grâce
Assurez-vous que vos fins de ligne unix sont
J'ai fait le fichier de test dans nano. Habituellement, j'utilise sublime mais c'est sur mon serveur, donc juste fouettée dans nano. Honnêtement, je n'ai aucune idée de comment faire pour afficher des caractères spéciaux dans nano. J'ai supposé que depuis que je l'ai fait sur linux il va s'occuper de la nouvelle ligne de façon appropriée.
C'est probablement unix retours à la ligne; est le fichier exécutable? (
il est en effet. Vous ne savez pas si cela aide, mais si je lance (/usr/bin/python test.py) il fonctionne comme un champion
Ce n'
\n
retours à la ligne.J'ai fait le fichier de test dans nano. Habituellement, j'utilise sublime mais c'est sur mon serveur, donc juste fouettée dans nano. Honnêtement, je n'ai aucune idée de comment faire pour afficher des caractères spéciaux dans nano. J'ai supposé que depuis que je l'ai fait sur linux il va s'occuper de la nouvelle ligne de façon appropriée.
C'est probablement unix retours à la ligne; est le fichier exécutable? (
chmod +x scriptname.py
)il est en effet. Vous ne savez pas si cela aide, mais si je lance (/usr/bin/python test.py) il fonctionne comme un champion
Ce n'
file test.py
dire?OriginalL'auteur DrewK | 2013-02-11
Vous devez vous connecter pour publier un commentaire.
Si vous essayez d'exécuter la commande comme
l'erreur peut ne pas avoir quelque chose à voir avec le shebang. Plutôt, le répertoire test.py réside dans n'est pas dans votre
PATH
. Essayezde contourner
PATH
de recherche.(C'est en outre à faire en sorte que le script est exécutable.)
Lorsque votre commande est constitué d'un seul mot, le shell recherche la commande dans chaque répertoire stocké dans
PATH
, en commençant par le premier, et en utilisant le premier match qu'il trouve. Le répertoire courant (.) n'est généralement pas dansPATH
, car il pourrait être un risque pour la sécurité, vous devez spécifier le chemin d'accès exact que./test.py
(le fichiertest.py
dans le répertoire courant).Ne pas demander, mais pourquoi est CHEMIN un risque pour la sécurité?
ajouter le répertoire courant le CHEMIN est considéré comme un risque de sécurité car un attaquant serait en mesure de "remplacer" les commandes standard par placer un script dans le répertoire courant. Imaginez une coutume
ls
script qui agit exactement comme normalls
sauf de ne pas l'affichage des répertoires appelés.evil-hidden-stuff
...Je n'ai jamais vu, il est indiqué de cette façon, mais je pense que la recommandation de ne pas mettre un '.' dans votre
PATH
serait d'étendre à tout chemin d'accès relatif. L'idée est que les recherches doivent se conformer à un ensemble fixe de répertoires qui ne dépend pas de votre répertoire de travail courant.OriginalL'auteur chepner
Sur le python docs page il dit:
Je ne sais pas si cela s'applique pour vous ou pas.
OriginalL'auteur ajon
En dehors de l'exécution du script avec un point ou le rendre exécutable, il y a peut être une autre question:
Si vous essayez d'utiliser un script écrit avec un éditeur windows, il peut contenir des windows les fins de ligne. La suppression de ces peut faire le beau spectacle de travailler à nouveau.
Pour supprimer ces fins de ligne, reportez-vous à Comment convertir Windows de fin de ligne en fin de ligne Unix (CR/LF pour LF) par exemple.
Voir aussi mes remarques générales sur l'échec de cette arborescence des évaluations à mon autre réponse.
OriginalL'auteur DomTomCat
Assurez-vous que le "PREMIÈRE LIGNE" est le shebang.
Ne pas donner à tout caractère de saut de ligne en début de fichier.
"Pas de caractère de saut de ligne en début"
OriginalL'auteur Ruhil Jaiswal
Cela peut être dû à une mauvaise configuration du noyau. Jetez un oeil à la configuration de votre noyau options, et de vérifier si
CONFIG_BINFMT_SCRIPT
est défini:Si la sortie de cette commande est rien outre
CONFIG_BINFMT_SCRIPT=y
, cela signifie que votre noyau ne vous permettra pas d'utiliser shebangs. Vous aurez besoin d'obtenir un nouveau noyau ou de recompiler votre noyau actuel avecCONFIG_BINFMT_SCRIPT=y
.OriginalL'auteur user60561