Ich bin ein neuer Ubuntu-Benutzer und versuche, unter Straberry Perl unter Windows 7 entwickelte Skripte auszuführen. Meine Ubuntu-Umgebung ist Ubuntu 14.04 LTS und Perl 5.18.2.
Die erste Zeile meiner Skripte lautet #!/usr/bin/perl
, die den Perl-Interpreter in / usr / bin aufrufen soll, und tatsächlich lebt dort ein 10,2-KB-Objekt. Meine Skripte werden jedoch nur ausgeführt, wenn 'perl' das erste Befehlszeilenargument auf Terminal ist, wie in perl myscript.pl
.
Gibt es eine Möglichkeit, Perl automatisch .pl-Skripte ausführen zu lassen, ohne es explizit aufzurufen?
command-line
mlibrt
quelle
quelle
./myscript.pl
which perl
?ls -l myscript.pl
? Was sind insbesondere die Berechtigungen - gibt es einex
in der Liste (so etwas wierwxr-x-rx
)? Möglicherweise müssen Sie das ausführbare Bit aktivieren: Eschmod u+x myscript.pl
wird für den Eigentümer (dh vermutlich für Sie) ausführbar.Antworten:
Ich gehe davon aus, dass Ihre (in Windows entwickelten) Dateien im DOS-Format (CRLF) vorliegen.
Das wird den Schebang stören und mit nicht so klaren Botschaften scheitern:
Informationen zum Überprüfen Ihrer Zeilenenden finden Sie unter /programming/3569997/view-line-endings-in-a-text-file .
Zum Beispiel:
Dann gibt es verschiedene Tools (z. B. dos2unix oder fromdos), mit denen Sie Ihre Textdateien in das richtige Unix-Zeilenende konvertieren können.
Nach der Konvertierung:
Und Sie können sie ausführen:
quelle
Um dies zu lösen, können Sie
#!/usr/bin/env perl
als Hash-Bang-Linie verwenden, anstatt#!/usr/bin/perl
dass Bash das erste Perl verwendet, das in Ihrem PATH gefunden wurde.Zitiert von http://perlmaven.com/hashbang
quelle
Eine andere Vermutung: Verfügt Ihr Skript über ausführbare Berechtigungen?
ls -l
sollte Berechtigungen wierwxrwxr-x
auflisten, um die Datei als Skript auszuführen. Sie können die Berechtigungen in Ihrer GUI ändern (Rechtsklick → Eigenschaften und abhängig von Ihrem Dateimanagerprogramm normalerweise eine Registerkarte Berechtigungen mit einer Einstellung wie Ausführen: □ Ausführen der Datei als Programm zulassen ) oder über eine Text-Shell mitchmod
; Beispiel:chmod u=rwx,g=rwx,o=rx my_script.pl
"Der Benutzer, dem die Datei gehört, kann sie lesen, schreiben und ausführen. Mitglieder der Gruppe, die sie besitzt, können dasselbe tun. Andere können sie lesen oder ausführen (aber nicht schreiben)."quelle
Vielen Dank an alle, ich habe eine funktionierende Lösung gefunden.
Ich benutze nur eine Version von Perl. Ich verwende eine Standard-Perl-Installation für eine Standard-Ubuntu 14.04 LTS-Installation mit den Standardtools bash und gedit.
Mit der bloßen 'myscript.pl' in der cmd-Zeile bekam ich seltsame Meldungen 'Keine solche Datei', 'Befehl nicht gefunden' oder 'Binärdatei kann nicht ausgeführt werden ...'.
Mit chmod u = x habe ich das x-Bit geändert. Das Skript wird immer noch nicht ausgeführt.
Dann habe ich mit gedit die UTF-8-Datei mit Unix LF anstelle von DOS CR / LF gespeichert. Würde immer noch nicht rennen.
Dann mit './myscript.pl' Bingo! es läuft schließlich mit! # / usr / bin / perl.
Fazit: Linux-Benutzer aus Windows müssen etwas Unix lernen ...
Mein Skript läuft jetzt sowohl unter Linux als auch unter Windows und druckt und sortiert Dateinamen und Nachrichten mit Akzentzeichen, sofern es im richtigen Standardformat gespeichert ist: UTF-8 mit Unix LF für Linux oder ISO-8849-1 oder ANSI mit CR / LF für Windows .
Wenn jemand mehr Informationen haben möchte, kann ich eine Barebone-Testversion veröffentlichen, die genau das tut.
quelle