Bash Strings verbinden

  • Hallo zusammen,


    verzweifle an einem vermeintlich einfachem Problem, hab schon alles versucht aber bekomm es nicht hin :conf:

    Bash
    #!/bin/bash
    STRING1="test"
    STRING2="wort"
    echo ${STRING1}
    echo ${STRING2}
    #Verbinden mit Bindestrich
    KETTE="${STRING1}-${STRING2}"
    echo ${KETTE}

    Normal sollt hier nach meinem Verständnis die Ausgabe folgendermaßen ausschauen:

    test

    wort

    test-wort


    Über die Console ausgeführt wir jeweils immer der erste String ignoriert und folgendes wird ausgegeben:

    test

    wort

    -wort


    Das Skript wird über Putty in der Console ausgeführt...

  • Go to Best Answer
  • Wie sind die Ausgaben von:

    Code
    echo $SHELL
    bash -x <Script>

    (Script anpassen und ohne spitze Klammern)?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Vielleicht auch noch die Ausgabe von

    Code
    bash --version

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect." Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert :shy: Bei mir tut das automatisch raspiBackup ;)

  • Danke für die schnelle Rückmeldung!

    Quote

    echo $SHELL

    bash -x <Script>

    1

    /bin/bash


    2

    + STRING1=$'test\r'

    + STRING2=$'wort\r'

    + echo $'test\r\r'

    test

    + echo $'wort\r\r'

    wort

    + KETTE=$'test\r-wort\r\r'

    + echo $'test\r-wort\r\r'

    -wort

  • Mit welchen Editor hast Du das Script erstellt? Versuch mal mit nano?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Du solltest unter Windows einen Editor nehmen der die Linux Zeilentrennung unterstuetzt :neutral: nodepad++ z.B. Linux nutzt LF (\n) und nicht CRLF (\n\r).

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect." Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert :shy: Bei mir tut das automatisch raspiBackup ;)

  • Mit Notepad++ über FTP.

    Habs grad über die Console mit Nano geöffnet- keine Auffälligkeiten

    Wie ist die Ausgabe von:

    Code
    cat -ET <Script>

    ?


    Bei mir z. B. so (mit nano per ssh):

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    • Best Answer

    Hm ... entweder hast Du nicht auf Linux im Notepad++ gestellt oder ftp aendert LF nach CRLF beim Xfer.

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect." Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert :shy: Bei mir tut das automatisch raspiBackup ;)

  • Irgendwas ist bei dir ganz komisch.


    Hier mal mein Test mit deinem Bash-Script:

    Am falschen Zeilenende kann es nicht liegen, da ansonsten der Interpreter nicht gefunden werden kann. Er sucht dann nach /bin/bash\r, was falsch ist.


    Wenn man dein Script über den Interpreter startet, lässt sich der Fehler aber reproduzieren:



    Code
    [deadeye@nexus ~]$ bash bb.sh 
    bb.sh: Zeile 2: $'\r': Kommando nicht gefunden.
    test
    wort
    -wort


    Installiere einfach das Tool dos2unix oder schmeiß deinen Windows-PC weg bzw. installiere dort ein ordentliches Betriebssystem, dass nicht nach dem Prinzip einer alten Schreibmaschine arbeitet. Das \r, welches als ^M dargestellt wird, ist der Wagenrücklauf.


    Eine weitere Möglichkeit wäre es FileZilla richtig zu konfigurieren. FTP hat die Eigenschaft, dass im ASCII-Modus zwischen den Sender/Empfänger die Zeilenenden umgewandelt werden, sodass sie vom Ziel verstanden werden.


    Eine weitere Möglichkeit wäre die Verwendung von SSH um dann im Terminal das Programm auf dem Ziel zu schreiben.

    Edited once, last by DeaD_EyE ().

  • war wirklich die Einstellung im Notepad++

    Das wird aus Erfahrung öfter mal passieren. :shy:

    Wenn Du nicht jedes mal suchen willst wo man das umstellen kann und endlich "Bearbeiten" >> "Format Zeilenende" gefunden hast, kannst Du unten in der Statusleiste durch ein Doppelklick auf "Windows" die Abkürzung nehmen.

  • Wenn Du eine existierende Datei mit Notepad++ oeffnest erkennt der Editor ob es eine Linux- oder Windowsdatei ist. Bei neuen Dateien musst Du allerdings dem Editor sagen welches Dateiformat genutzt werden soll.

    Die Ausgabe -wort am Ende ist so auch erklaerbar: Der zusammengesetzte String KETTE ist $'test\r-wort\r\r'. Wenn der ausgegeben wird wird erst test ausgegeben. Danach springt die Schreibmarke (Cursor) wg \r wieder an den Anfang der Zeile und es wird -wort\r\r ausgegeben. Dabei wird natuerlich der erste Text test ueberschrieben und es erscheint somit als wuerde die Verkettung der Strings nicht funktioniert haben :)

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect." Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert :shy: Bei mir tut das automatisch raspiBackup ;)

  • Das wird aus Erfahrung öfter mal passieren.

    Nicht wenn man direkt auf der Linuxkiste mit einem Editor arbeitet :fies:

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect." Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert :shy: Bei mir tut das automatisch raspiBackup ;)

  • Man kann sogar unter Linux zocken. Gestern hab ich Far Cry 5 gezockt (Lutris).


    16 Jahre Linux-Server + 8 Jahre auf dem Desktop.

    Ich nutze Windows nur, wenn ich dafür bezahlt werde.

  • Nicht wenn man direkt auf der Linuxkiste mit einem Editor arbeitet

    Wenn ich mich wie üblich per SCP verbinde und dort eine neue Datei erstelle, öffnet sich bei mir Notepad++ mit Windows (CR+LF). Da stören mich die drei Klicks (1 Doppelklick + 1 Klick um Unix auszuwählen) nicht. Das ist kompfortabler als mich per VNC zu verbinden und dort einen Editor zu öffnen oder gar den Linux-Kübel anzuwerfen. :baeh2:

  • Ich nutze kein UI sondern gehe per ssh auf die Linuxkiste und nutze vi oder manchmal auch mc mit seinem Editor :shy: Aber es gibt viele Wege nach Rom Dateien zu editieren und ein jeder waehlt den fuer ihn optimalsten Weg :cool:

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect." Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert :shy: Bei mir tut das automatisch raspiBackup ;)

  • Da stören mich die drei Klicks (1 Doppelklick + 1 Klick um Unix auszuwählen) nicht.

    Mit Rechtsklick sind es sogar nur 2 :lol:


    EDIT

    Oder unter Einstellungen >> neue Datei direkt unix einstellen

  • Ich arbeite fast nur remote. Es ist immer mindestens ein Terminal mit einer SSH-Verbindung offen und da ich mit einer IDE arbeite und direkt auf dem Zielgerät entwickle, hänge ich das Dateisystem mit sshfs ein. Für Windows gibt es sicherlich auch noch Tools, die via SSH ein Dateisystem mounten können.

    Windows ist nicht meine Welt...

    Über Zeilenenden denke ich überhaupt nicht nach, da alle meine Tools sich darum kümmern und da ich auch Linux auf dem Desktop nutze, kann ich davon gar nicht betroffen sein.


    Selbst die SSH-Verbidung habe ich so konfiguriert, dass ich nur einen Namen verwenden muss.


    Code
    akku_mount
    ssh akku


    Code: ~/.ssh/config
    Host akku
        HostName 192.168.0.108
        Port 22
        User server

    Bash: ~/.bashrc
    # die letzten 2 Zeilen
    alias akku_mount="sshfs akku:/home/server/akku /home/deadeye/akku"
    alias akku_umount="umount /home/deadeye/akku"


    Ich muss noch nicht einmal ein Passwort eingeben, da ich das Public-Private Key-Verfahren nutze.