Frage von gerlochi, 70

Linux Datei ausführbar machen?

Hey, ich habe einen kleinen Shell befehl geschrieben und ihn mit chmod +x ausführbar gemacht. Jedoch muss ich ihn immer mit "./" davor starten, kann man das so ändern das ich nur die Datei im Terminal angeben muss(user@pc:~$ dateiname)?

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von guenterhalt, Community-Experte für Computer & Linux, 48

da musst du die PATH-Variable ändern.

PATH enthält normalerweise die Verzeichnisse, in denen das System nach Binaries oder ausführbaren Script-Dateien sucht.

Wenn also dein PWD einbezogen  werden soll, dann erweitere die PATH-Variable ( in /etc/profile und/oder /etc/bash.bashrc ) durch

export PATH=$PATH:./ 

wobei das nicht immer zu empfehlen ist. Je nach Reihenfolge wird dann u.U. ein Programm-Name benutzt, der in $PWD liegt, so dass das "richtige" Binary nicht benutzt werden kann. Das müsste man dann z.b. mit /usr/bin/<Name> aufrufen, was noch lästiger ist als ./<Name> .

Kommentar von gerlochi ,

danke

Expertenantwort
von TeeTier, Community-Experte für programmieren, 35

Neben den Ideen aus den anderen Antworten kannst du auch ein Alias verwenden.

Dazu musst du an das Ende der Datei ~/.bashrc (die in deinem Home-Verzeichnis liegt, aber wegen dem führenden Punkt oft nicht angezeigt wird) Folgende Zeile anhängen:

alias foo='/ganzer/pfad/nach/foo.sh'

Diese Änderung wird bei der nächsten Shell-Session aktiv, oder du tippst einfach schnell ...

source ~/.bashrc

... hinterher, um die Änderungen zu übernehmen.

Fortan kannst du dein Skript ausführen, indem du einfach nur "foo" eingibst, bzw. das, was du als Alias gewählt hast. Die Datei musst du dazu auch nicht irgendwo hinkopieren oder auf Pfade in $PATH Rücksicht nehmen.

Für welche der vielen genannten Lösungen du dich letzendlich entscheidest, musst du dann selbst wissen. :)

Viel Spaß damit! :)

Kommentar von gerlochi ,

danke

Antwort
von mrlilienweg, 70

Shell-Scripte speichert man mit der Endung programmname.sh. Als Pfad nimmt man am /usr/local/bin dort speichert man die Shell-Scripts ab.

Da ja /usr/local/bin automatisch durchgesucht wird, reicht es wenn du einfach nachdem es ausführbar gemacht wurde mit "programmname.sh" aufrufst.

Kommentar von spaghetticode ,

Das funktioniert nur, wenn das Script in einem der Verzeichnisse liegt, die automatisch durchsucht werden (im Windows-Duktus: PATH). Du musst also dein Script entweder in eines dieser Verzeichnisse legen (wie es mrlilienweg beschreibt), oder das jetzige Verzeichnis der Umgebungsvariablen hinzufügen (unter Linux eher unüblich). Die Zeichenfolge "./" bedeutet sinngemäß: "Suche im aktuellen Verzeichnis".

Kommentar von guenterhalt ,

Shell-Scripte speichert man mit der Endung programmname.sh.

das kann man so machen. So wie du, @mrlilienweg , das hier formulierst, hört sich an wie Pflicht.
So ist es keinesfalls. Namen sind unter Linux frei wählbar.
Man muss nur aufpassen, dass man nicht den Namen eines bereits existierenden Programms wählt. Sollte das eigene Script-Programm früher gefunden werden ( Reihenfolge in der Variablen PATH), dann kann man das andere nur noch mit vollem Pfad starten.

Kommentar von spaghetticode ,

Wichtige Ergänzung von guenterhalt - nur noch kurz zur Erklärung: Während Windows sich bei der Interpretation eines Dateiformats vor allem an der Dateiendung orientiert, orientiert sich Linux eher an Dateiattributen und Metainformationen. Die Dateiendungen haben bei einem Linuxsystem weitestgehend lediglich dokumentarischen Wert für den Benutzer.

Kommentar von gerlochi ,

danke

Antwort
von Linuxaffiner, 24

@Gerlochi

Versuch doch mal bei der Ausführung des Shellskriptes das "/" wegzulassen - Beispiel: . Shellskript

Meine Shellskripte starte ich immer ohne "/"...

LA

Kommentar von guenterhalt ,

das ist nicht zu empfehlen.  Ein solcher Aufruf wird im Normalfalle gleich das Terminal beenden.

Kommentar von gerlochi ,

danke trotzdem

Keine passende Antwort gefunden?

Fragen Sie die Community