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
Linux 15.036 Themen, 107.107 Beiträge
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
Hm ja,
also in ein anderes Verzeichnis brauchst du nicht zu gehen.
> ./HalloWelt.pl
macht es auch.
Bundeskanzler
Klar, aber er wollte es ja nur mit HalloWelt.pl aufrufen.
Klaus
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
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
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
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
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
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
Nana, wer wird denn...
Bundeskanzler
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
Siehst du, ich auch nicht (-; Auch ich lerne immer noch dabei. Ist doch auch gut so.
Bye, Klaus