linux command durch selbstgeschriebenes script ausgetauscht

  • moin,

    ich habe gestern mein erstes python script geschrieben, was in verschiedenen verzeichnissen ordnung schafften soll, indem es die einzelnen daten typen in die richtigen ordner einfügt.

    übereifrig hab ich dann chat gbt gefragt wie ich das script so ausführbar machen kann das ich egal in welchem verzeichnis nur den command eingeben muss und dann wirds ausgeführt.


    jetzt aber das problem:

    ich hab das script 'sort' genannt. war irgendwie naheliegend, ich hab aber nicht gedacht das es auch einen command namens 'sort' gibt. den kann ich jetzt nicht mehr ausführen. ich hab versucht einfach im neu angelegten ~/bin/ ordner den namen meines scripts zu ändern, in der hoffnung das ich das jetzt einfach wieder normal nutzen kann. Hat aber nicht geklappt :/ hat von euch jemand einen plan?


    danke im Vorraus :)

  • Hintergrundswissen: Du hast deine PATH Variable so gesetzt, dass sie auch im ~/bin Ordner sucht? Die Reihenfolge der Einträge in der PATH Variable gibt auch die Reihenfolge vor, in der die Bash (bzw. Shell) sucht. Du kannst den ~/bin Entrag an den Anfang setzen, dann findet das System erst dein sort Kommando. Wenn du es ans Ende setzt findet das System das sort Kommando aus /usr/bin zuerst und benutzt dieses.

    Du kannst z.B. dein sort Kommando in Sort umbenennen (großes S), dann bleibt der Bezug erhalten und du kannst beim Aufruf zwischen beiden wählen.

    ch hab versucht einfach im neu angelegten ~/bin/ ordner den namen meines scripts zu ändern, in der hoffnung das ich das jetzt einfach wieder normal nutzen kann. Hat aber nicht geklappt

    Das klappt genau so. Es gibt allerdings einen Haken. Die Bash cached die Kommandos und du musst entweder das Terminal neu starten oder mit dem Kommando hash -r dafür sorgen, dass der Cash bzw. die angelegte Hash Tabelle neu erstellt wird.

  • Hintergrundswissen: Du hast deine PATH Variable so gesetzt, dass sie auch im ~/bin Ordner sucht? Die Reihenfolge der Einträge in der PATH Variable gibt auch die Reihenfolge vor, in der die Bash (bzw. Shell) sucht. Du kannst den ~/bin Entrag an den Anfang setzen, dann findet das System erst dein sort Kommando. Wenn du es ans Ende setzt findet das System das sort Kommando aus /usr/bin zuerst und benutzt dieses.

    Genau das habe ich gemacht.

    ich weiß aber nicht mehr genau, wie X/

    könntest du mir eventuell den Weg dazu aufzeigen ?

    mit ChatGPT zu arbeiten ist irgendwie auch schwierig, weils teilweise ziemlichen bullshit zeigt und ich das dann am Ende nur noch schlimmer mache


    das habe ich, am Ende, in meiner .bashrc Datei eingetragen 'export PATH="$HOME/bin:$PATH"' also damit der command ausführbar wird.

    wie änder ich das um damit das System zuerst in /usr/bin sucht und nicht in ~/bin ?


    Das klappt genau so. Es gibt allerdings einen Haken. Die Bash cached die Kommandos und du musst entweder das Terminal neu starten oder mit dem Kommando hash -r dafür sorgen, dass der Cash bzw. die angelegte Hash Tabelle neu erstellt wird.

    Also hab das jetzt so gemacht, ich hab die datei einfach umgenannt und dann mit 'hash -r' aktualliesrt. Das funktioniert jetzt soweit. Jetzt kann ich sowol den eigendlichen "sort" command nutzen als auch meinen neuen "Sort" command

    Edited once, last by DenalB: 2 Beiträge von moin13 mit diesem Beitrag zusammengefügt. (March 15, 2025 at 9:55 PM).

  • könntest du mir eventuell den Weg dazu aufzeigen ?

    Na dann wollen wir mal. Ich gehe im folgenden davon aus, dass du die Bash als Shell benutzt. Sie schaut in der Pfasvariablen PATH nach, wo sie suchen soll, wenn sie ein Kommando ausführen soll. Du kannst dir mit dem echo Kommando den Inhalt der Pfadvariablen ausgeben lassen. Bei mir z.B.:

    Code
    echo $PATH
    /home/gerb/.local/bin:/home/gerb/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

    Man greift auf die Variablen zu indem man ihnen ein $-Zeichen voranstellt. Man kann beliebigen Variablen beliebige Werte zuweisen:

    Code
    A=abc			# Der Variablen A wird der Wert abc zugewiesen
    echo $A			# Zeige den Inhalt von A an
    abc				# das ist der Inhalt von A
    A=${A}def		# Weise der Variablen A ihren alten Wert und zusätzlich def zu
    echo $A			# Zeige wieder Wert an
    abcdef			# hier der geänderte Wert

    Die geschweiften Klammern kann man meistens weglassen, machen die Zuweisung aber eindeutiger denn hättest du gleichzeitig eine Variable Adef definiert würde die 4. Zeile ein anderes Ergebnis liefern.

    Zurück zur Pfadvariable. Sie wird systemweit in /etc/profile (bzw. /etc/environment) zugewiesen. Man kann sie in der eigenen ~/.profile überschreiben. Die eigene .profile wird beim Einloggen einmal gelesen. Man kann sie auch in der ~/.bashrc zuweisen / ergänzen, diese wird jedesmal durchlaufen, wenn man eine Bash öffnet (z.B. beim öffnen eines Terminals). Das würde aber dazu führen, dass, falls aus einer Shell eine weitere Shell geöffnet wird, die zusätzlichen Pfade 2 mal eingefügt werden.

    In der Pfadvariablen werden einzelne Einträge mit einem Doppelpunkt getrennt. Bei mir steht folgender Eintrag in meiner .profile:

    Code
    PATH="$HOME/.local/bin:$PATH"
    # set PATH so it includes user's private bin if it exists
    if [ -d "$HOME/bin" ] ; then
        PATH="$HOME/bin:$PATH"
    fi

    Erst wird der Pfad um den Wert ~/.local/bin ergänzt und wenn der User einen ~/bin Ordner hat wird der Pfad auch noch um diesen ergänzt. Die zusätzlichen Pfade werden vorne eingefügt, so dass die Bash dort zuerst nach Kommandos sucht. So kann man, wie es dir passiert ist, Systemkommandos überschreiben.

    Sag, ob du weitere Infos benötigst.

  • off Topics:

    Ich weiß nicht wie komisch das jetzt ist. Ich bin wie gesagt eher ein Anfänger was Linux und Python angeht. Ich hab es jetzt mal auf GitHub veröffentlicht, gar nicht mit dem Anspruch eine neue Bahnbrechende Entwicklung gemacht zu haben.

    Ich wollte es einfach einmal austesten und weil ich auch ein bisschen stolz darauf bin.

    ich hab auch eine Installationsanleitung geschrieben, wollt ihr euch die vielleicht einmal anschauen? Das hat ja doch bisschen was mit dem Thema hier zu tun :)

    GitHub - SweetChilli1/Sort.py: Python Script: Sorts files in the directory by creating folders either by name or type of files and then moving the files to the appropriate folders.
    Python Script: Sorts files in the directory by creating folders either by name or type of files and then moving the files to the appropriate folders. -…
    github.com


    Und Danke für diese wirklich gute Hilfe in diesem Forum <3

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!