Bash Strings verbinden

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • 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...

  • Zur hilfreichsten Antwort springen
  • Ü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...

    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

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

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

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

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • 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):

    Spoiler anzeigen
    Code
    :~ $ cat -ET ./kette
    #!/bin/bash$
    STRING1="test"$
    STRING2="wort"$
    echo ${STRING1}$
    echo ${STRING2}$
    #Verbinden mit Bindestrich$
    KETTE="${STRING1}-${STRING2}"$
    echo ${KETTE}$
    Code
    :~ $ bash -x ./kette
    + STRING1=test
    + STRING2=wort
    + echo test
    test
    + echo wort
    wort
    + KETTE=test-wort
    + echo test-wort
    test-wort

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

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • 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.

    Einmal editiert, zuletzt von RestlessMud46765 (18. September 2021 um 11:07)

  • 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 :)

  • 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:

  • 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.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!