Linux 15.036 Themen, 107.107 Beiträge

Mein Perl-Programm will nicht starten!

NeoZeroCool / 12 Antworten / Baumansicht Nickles

Hi,
habe kürzlich mein erstes Perl-Proggi geschrieben (ein sagenhaftes "Hallo Welt"-Programm ;-), um mal zu testen, ob mein Perl (unter SUSE 7.2) richtig installiert ist.
Wenn das Programm mit
> perl HalloWelt.pl
aufgerufen wird, läuft es anstandslos.
Versuche ich es jedoch über den Dateinamen zu starten mit
> HalloWelt.pl
bekomme ich die Fehlermeldung
> bash: HalloWelt.pl: command not found

Mein Programm sieht folgendermaßen aus:
#!/usr/bin/perl -w
print ("Hallo Welt!\\\\n")

Die Fakten kurz und bündig:
- Beim Ausführen von HalloWelt.pl befinde ich mich im richtigen Verzeichnis
- Das Execute-Bit von HalloWelt.pl ist gesetzt
- Die Perl-Programmdatei befindet sich tatsächlich in usr/bin
- Das die bash von SUSE 7.2 mit #! nicht zurecht kommt, kann ich mir nicht vorstellen
- Interessant: Starte ich HalloWelt.pl über den Midnight Commander wird das Programm anstandlos ausgeführt

Also wo liegt das Problem?

HtM
NZC

bei Antwort benachrichtigen
Klaus_T NeoZeroCool „Mein Perl-Programm will nicht starten!“
Optionen

Das aus Sicherheitsgruenden das aktuelle Verzeichnis, in dem du dich befindest, nicht in $PATH liegt. Rufe es von einem anderen Verzeichnis auf oder nehme den . mit im Pfad auf (nicht zu empfehlen)

Klaus

bei Antwort benachrichtigen
Bundeskanzler Klaus_T „Das aus Sicherheitsgruenden das aktuelle Verzeichnis, in dem du dich befindest,...“
Optionen

Hm ja,

also in ein anderes Verzeichnis brauchst du nicht zu gehen.

> ./HalloWelt.pl

macht es auch.

Bundeskanzler

bei Antwort benachrichtigen
Klaus_T Bundeskanzler „Hm ja, also in ein anderes Verzeichnis brauchst du nicht zu gehen....“
Optionen

Klar, aber er wollte es ja nur mit HalloWelt.pl aufrufen.

Klaus

bei Antwort benachrichtigen
Bundeskanzler Klaus_T „Klar, aber er wollte es ja nur mit HalloWelt.pl aufrufen. Klaus“
Optionen

Wenn das Verzeichnis, in dem HalloWelt.pl liegt, nicht in $PATH steht, muss er in jedem Fall den vollständigen Pfad angeben. Einfach

> HalloWelt.pl

klappt nicht.
Sorry, ich will nicht kleinlich sein, aber wenn wir hier solche einfachen Sachen diskutieren, sollten wir uns schon genau ausdrücken.
Nichts für ungut.

Bundeskanzler

bei Antwort benachrichtigen
Klaus_T Bundeskanzler „Wenn das Verzeichnis, in dem HalloWelt.pl liegt, nicht in PATH steht, muss er in...“
Optionen

Er hat ja geschrieben, dass das Script in /usr/bin liegt. /usr/bin ist aber *immer* in $PATH, also muss er das Verzeichnis nicht mit angeben. Nur wenn er sich in /usr/bin befindet, muss entweder der '.' mit in $PATH liegen oder er muss, wie du schon sagtest ./ mit angeben.
Da er es aber so nicht haben will, muss er eben in einem anderen Verzeichnis sein.

Klaus

bei Antwort benachrichtigen
Bundeskanzler Klaus_T „Er hat ja geschrieben, dass das Script in /usr/bin liegt. /usr/bin ist aber...“
Optionen

Sein eigenes Script liegt in /usr/bin? Ich würde sagen, er meint eher das perl-executable:

#!/usr/bin/perl

Deine Begründung ist falsch. In welchem Verzeichnis du beim Programmaufruf gerade bist, ist völlig egal, es sei denn, du verwendest Sachen wie ./ oder ../ beim Aufruf.

Bundeskanzler

bei Antwort benachrichtigen
Klaus_T Bundeskanzler „Sein eigenes Script liegt in /usr/bin? Ich würde sagen, er meint eher das...“
Optionen

Ja, sorry, habe gerade noch einmal nachgelesen, dass perl in /usr/bin liegt. Ich nehme alles zurueck.
Allerdings verstehe ich den letzten Satz von dir nicht. Wenn ich mich nicht in dem Verzeichnis befinde, in dem ein Script liegt und das Verzeichnis, in dem das Script liegt, ist in $PATH, kannst du es so aufrufen.
Befindest du dich in dem Verzeichnis, in dem das Script ist, kannst du das Script nur aufrufen, wenn du entweder ./ davor setzt oder den Punkt '.' in $PATH mit aufnimmst.

Oder reden wir hier aneinander vorbei? Ich verstehe dich jetzt so, dass du meinst, man kann ein Script nur aufrufen, wenn man den kompletten Pfad mit angibt.

Bye, Klaus

bei Antwort benachrichtigen
Bundeskanzler Klaus_T „Ja, sorry, habe gerade noch einmal nachgelesen, dass perl in /usr/bin liegt. Ich...“
Optionen

Hihi,
lustige Privatunterhaltung. Hoffentlich langweilen wir euch nicht!

> Befindest du dich in dem Verzeichnis, in dem das Script ist, kannst du das Script nur aufrufen, wenn du entweder ./ davor setzt oder den Punkt '.' in $PATH mit aufnimmst.

Stimmt doch nicht.

$ which hostname
/bin/hostname
$ cd /bin
$ hostname
horse

Mein $PATH liste ich jetzt hier nicht, du wirst mir aber glauben, dass "." nicht darin vorkommt.
Anders ausgedrückt: Die Auswertung der Umgebungsvariable $PATH hängt nicht davon ab, in welchem Verzeichnis ich mich befinde. Ich bin selber durch die Diskussion nochmal unsicher geworden und habe es daher mit tcsh und bash ausprobiert.

Bundeskanzler

bei Antwort benachrichtigen
Klaus_T Bundeskanzler „Hihi, lustige Privatunterhaltung. Hoffentlich langweilen wir euch nicht!...“
Optionen

Du hast recht, ich mache mich hier schon ganz klein. Das mit dem punkt gilt nur, wenn du ein Script in einem Verzeichnis aufrufen willst, dass nicht in $PATH liegt.
Sorry, ich habe mich so von meinem Gedaechtnis leiten lassen, ohne es selbst auzuprobieren. Ich war echt der Ueberzeugung, das die Umgebungsvariable dann keine Rolle spielt.

Bye, Klaus

bei Antwort benachrichtigen
Bundeskanzler Klaus_T „Du hast recht, ich mache mich hier schon ganz klein. Das mit dem punkt gilt nur,...“
Optionen

Nana, wer wird denn...

Bundeskanzler

bei Antwort benachrichtigen
NeoZeroCool Nachtrag zu: „Mein Perl-Programm will nicht starten!“
Optionen

Holla, da hab ich ja ne ganze Welle losgetreten.
Danke erst mal für die Antworten. Das mit der Sicherheit hatte ich total vergessen.
Die Lösung mit ./HalloWelt.pl wird es tun.

Sorry, das meine Frage Verwirrung unter euch gestiftet hat ;-)
(ich habe die Antworten ein paarmal lesen müssen, aber jetzt habe ich es verstanden - und werde es auch nie, nie wieder vergessen ...)

HtM
NZC

bei Antwort benachrichtigen
Klaus_T NeoZeroCool „Holla, da hab ich ja ne ganze Welle losgetreten. Danke erst mal für die...“
Optionen

Siehst du, ich auch nicht (-; Auch ich lerne immer noch dabei. Ist doch auch gut so.

Bye, Klaus

bei Antwort benachrichtigen