• sh : usage?

    From Kai Richter@2:240/77 to Alle on Mon Mar 18 22:48:22 2024
    Hallo Echo!

    Mag jemand mal kurz die Arbeitsweise von : erklären?

    Habe ich in ezjail-admin gefunden:

    ezjail_snap_date_format="%Y%m%d%H%M"

    # read user config
    [ -f "${ezjail_etc}/ezjail.conf" ] && . "${ezjail_etc}/ezjail.conf"

    Bis hier soweit verständlich, variablen deklaration und der dot . steht im man.

    # set defaults
    : ${ezjail_jaildir="/usr/jails"}

    Aber hier stehe ich auf dem Schlauch.
    : liefert immer rc 0, aber wozu ist das hier gut?

    Tschuess

    Kai

    --- GoldED+/LNX 1.1.4.7
    * Origin: Sie wandern stumm durch die Botanik. (2:240/77)
  • From Gerhard Strangar@2:240/2188.575 to Kai Richter on Tue Mar 19 17:46:41 2024
    Am 18 Mar 24 22:48:22 schrob Kai Richter an Alle zum Thema
    <sh : usage?>

    # set defaults
    : ${ezjail_jaildir="/usr/jails"}

    Aber hier stehe ich auf dem Schlauch.
    : liefert immer rc 0, aber wozu ist das hier gut?

    Man kann damit so "auskommentieren", als waere in der Zeile ein Kommando erfolgreich gelaufen. Wenn es wirklich nur eine sh und keine bash ist, waere die Zeile naemlich syntaktisch falsch.



    Tschoe mit Oe
    Gerhard
    ---
    * Origin: (2:240/2188.575)
  • From Kai Richter@2:240/77 to Gerhard Strangar on Sat Mar 23 10:25:12 2024
    Tag Gerhard!

    Am 19 Mar 24, Gerhard Strangar schrieb an Kai Richter:

    Am 18 Mar 24 22:48:22 schrob Kai Richter an Alle zum Thema
    <sh : usage?>

    # set defaults
    : ${ezjail_jaildir="/usr/jails"}

    Aber hier stehe ich auf dem Schlauch.
    : liefert immer rc 0, aber wozu ist das hier gut?

    Man kann damit so "auskommentieren", als waere in der Zeile ein
    Kommando erfolgreich gelaufen. Wenn es wirklich nur eine sh und keine
    bash ist, waere die Zeile naemlich syntaktisch falsch.

    Shebang ist /bin/sh. Mal sehen...

    ...# /bin/sh
    # echo $SHELL
    /bin/csh
    #

    Ohne : gibt es einen Fehler programm nicht gefunden, aber die Variable wird anscheinend trotzdem zugewiesen? Mit : aber nicht?

    # /bin/sh
    # ${testvar="hutzel"}
    /bin/sh: hutzel: not found
    # echo $testvar
    hutzel
    #
    # : ${testvar="zwei"}
    # echo $testvar
    hutzel
    #
    # : ${testv2="zwei"}
    # echo $testv2
    zwei

    Diese Syntax tut zwar was die Überschrift sagt, sie setzt den default von nicht existenten Variablen und ich habe jetzt auch die Funktion des : verstanden, jetzt bleibt mir nur noch unverständlich warum die Zuweisung nur funktioniert wenn die Variable noch nicht existiert.

    Hat jemand schon FreeBSD 14 laufen und kann sagen wie die neue Shell damit umgeht?

    Tschuess

    Kai

    --- GoldED+/LNX 1.1.4.7
    * Origin: Seven holy path to hell (2:240/77)
  • From Gerhard Strangar@2:240/2188.575 to Kai Richter on Tue Mar 26 05:34:20 2024
    Am 23 Mar 24 10:25:12 schrob Kai Richter an Gerhard Strangar zum Thema
    <sh : usage?>

    Shebang ist /bin/sh. Mal sehen...

    Wirklich?

    # /bin/sh
    ^
    Hier ist naemlich kein Ausrufezeichen.



    Tschoe mit Oe
    Gerhard
    ---
    * Origin: (2:240/2188.575)
  • From Kai Richter@2:240/77 to Gerhard Strangar on Tue Mar 26 16:33:42 2024
    Hallo Gerhard!

    Am 26 Mar 24, Gerhard Strangar schrieb an Kai Richter:

    Shebang ist /bin/sh. Mal sehen...
    Wirklich?

    Im script von ezjail, ja.


    # /bin/sh
    ^
    Hier ist naemlich kein Ausrufezeichen.

    Bekomme ich auch nicht dahin:

    # /bin/sh
    # !/bin/sh
    /bin/sh: !/bin/sh: not found
    #

    Tschuess

    Kai

    --- GoldED+/LNX 1.1.4.7
    * Origin: Im Quadrat sind 3 + 4 doch 5? (2:240/77)
  • From Gerhard Strangar@2:240/2188.575 to Kai Richter on Tue Mar 26 18:45:08 2024
    Am 26 Mar 24 16:33:42 schrob Kai Richter an Gerhard Strangar zum Thema
    <sh : usage?>

    Bekomme ich auch nicht dahin:
    # /bin/sh
    # !/bin/sh
    /bin/sh: !/bin/sh: not found

    #!/bin/sh



    Tschoe mit Oe
    Gerhard
    ---
    * Origin: (2:240/2188.575)
  • From Kai Richter@2:240/77 to Gerhard Strangar on Sun Mar 31 16:29:08 2024
    Servus Gerhard!

    Am 26 Mar 24, Kai Richter schrieb an Gerhard Strangar:

    # /bin/sh
    ^
    Hier ist naemlich kein Ausrufezeichen.

    Bekomme ich auch nicht dahin:

    Ich könnte es hinbekommen, aber dann müsste ich den Shellprompt anpassen damit kein Leerzeichen nach dem # gezeigt wird.

    Nur damit wir uns nicht missverstehen, wenn ich /bin/sh manuell starte, dann sollte doch dieselbe Shell Version laufen wie auch in einem Script mit Shebang auf /bin/sh. Die Ausgabe von "echo $SHELL" müsste folglich identisch sein.

    Oder übersehe ich gerade mangels Wissen etwas?

    Tschuess

    Kai

    --- GoldED+/LNX 1.1.4.7
    * Origin: Temper temper, time to explode. (2:240/77)
  • From Kai Richter@2:240/77 to Gerhard Strangar on Sun Mar 31 16:54:24 2024
    Hey Gerhard!

    Am 19 Mar 24, Gerhard Strangar schrieb an Kai Richter:

    # set defaults
    : ${ezjail_jaildir="/usr/jails"}

    Aber hier stehe ich auf dem Schlauch.
    : liefert immer rc 0, aber wozu ist das hier gut?

    Man kann damit so "auskommentieren", als waere in der Zeile ein
    Kommando erfolgreich gelaufen. Wenn es wirklich nur eine sh und keine
    bash ist, waere die Zeile naemlich syntaktisch falsch.

    Ich stolpere gerade darüber, dass genau diese Syntax auch in rc.d Scripten benutzt wird. Diese sind ebenfalls #!/bin/sh und haben zum Beispiel:

    load_rc_config $name
    : ${dummy_enable:=no}
    : ${dummy_msg="Nothing started."}

    Tschuess

    Kai

    --- GoldED+/LNX 1.1.4.7
    * Origin: Target locked (2:240/77)
  • From Gerhard Strangar@2:240/2188.575 to Kai Richter on Mon Apr 1 06:53:24 2024
    Am 31 Mar 24 16:54:24 schrob Kai Richter an Gerhard Strangar zum Thema
    <sh : usage?>

    Ich stolpere gerade darueber, dass genau diese Syntax auch in rc.d Scripten benutzt wird. Diese sind ebenfalls #!/bin/sh und haben zum Beispiel:

    load_rc_config $name
    : ${dummy_enable:=no}
    : ${dummy_msg="Nothing started."}

    Auf Linux ist sh auch eine bash, vielleicht ist die hier nicht richtig kompatibel. Mit einer echten sh passiert in der Doppelpunkt-Zeile jedenfalls nichts, ausser dass der Returncode 0 ist.



    Tschoe mit Oe
    Gerhard
    ---
    * Origin: (2:240/2188.575)
  • From Gerrit Kuehn@2:240/12 to Gerhard Strangar on Mon Apr 1 18:29:20 2024
    Hello Gerhard!

    01 Apr 24 06:53, Gerhard Strangar wrote to Kai Richter:

    Auf Linux ist sh auch eine bash,

    Schonmal mit Debian gearbeitet?


    Regards,
    Gerrit

    ... 6:29PM up 8 days, 8:43, 6 users, load averages: 0.34, 0.36, 0.29

    --- msged/fbsd 6.3 2021-12-02
    * Origin: And the pastiche we've invented (2:240/12)
  • From Kai Richter@2:240/77 to Gerhard Strangar on Mon Apr 1 23:22:34 2024
    Hey Gerhard!

    Am 01 Apr 24, Gerhard Strangar schrieb an Kai Richter:

    Ich stolpere gerade darueber, dass genau diese Syntax auch in rc.d
    Scripten benutzt wird. Diese sind ebenfalls #!/bin/sh und
    haben zum Beispiel:

    load_rc_config $name
    : ${dummy_enable:=no}
    : ${dummy_msg="Nothing started."}

    Auf Linux ist sh auch eine bash, vielleicht ist die hier nicht richtig kompatibel. Mit einer echten sh passiert in der Doppelpunkt-Zeile jedenfalls nichts, ausser dass der Returncode 0 ist.

    Dann kommt FreeBSD mit einer unechten sh daher?

    https://docs.freebsd.org/en/articles/rc-scripting/
    Kapitel 4. A configurable dummy script

    Tschuess

    Kai

    --- GoldED+/LNX 1.1.4.7
    * Origin: Sag mir wo die Blumen sind, wo sind sie geblieben... (2:240/77)
  • From Gerhard Strangar@2:240/2188.575 to Kai Richter on Tue Apr 2 07:06:21 2024
    Am 01 Apr 24 23:22:34 schrob Kai Richter an Gerhard Strangar zum Thema
    <sh : usage?>

    load_rc_config $name
    : ${dummy_enable:=no}
    : ${dummy_msg="Nothing started."}
    Auf Linux ist sh auch eine bash, vielleicht ist die hier nicht
    richtig kompatibel. Mit einer echten sh passiert in der
    Doppelpunkt-Zeile jedenfalls nichts, ausser dass der Returncode 0
    ist.
    Dann kommt FreeBSD mit einer unechten sh daher?

    Okay, da lag ich falsch. Die kann das tatsaechlich.
    Bei ": ${dummy_enable:=no}" wird der Wert der Variablen nur gesetzt, wenn noch nichts anderes drinsteht und weil man die Variable an der Stelle gar nicht benutzen will, wird mit dem Doppelpunkt das Ergebnis der Auswertung weggeworfen und man behaelt als Nebenwirkung die Zuweisung. Die zweite Zeile ist wohl eine simple Zuweisung, aber das finde ich in der man-Page nicht.




    Tschoe mit Oe
    Gerhard
    ---
    * Origin: (2:240/2188.575)
  • From Kai Richter@2:240/77 to Gerhard Strangar on Wed Apr 3 10:53:56 2024
    Tag auch Gerhard!

    Am 02 Apr 24, Gerhard Strangar schrieb an Kai Richter:

    load_rc_config $name
    : ${dummy_enable:=no}
    : ${dummy_msg="Nothing started."}

    Bei ": ${dummy_enable:=no}" wird der Wert der Variablen nur gesetzt,
    wenn noch nichts anderes drinsteht und weil man die Variable an der
    Stelle gar nicht benutzen will, wird mit dem Doppelpunkt das Ergebnis
    der Auswertung weggeworfen und man behaelt als Nebenwirkung die
    Zuweisung. Die zweite Zeile ist wohl eine simple Zuweisung, aber das
    finde ich in der man-Page nicht.

    Ich bin auf der Suche nach den here-documents (die <<EOF Umleitungen) vermutlich drüber gestoplpert. man sh und dann nach Parameter Expansion suchen.

    Parameter Expansion
    The format for parameter expansion is as follows:

    ${expression}

    where expression consists of all characters until the matching `}'. Any
    `}' escaped by a backslash or within a single-quoted or double-quoted
    string, and characters in embedded arithmetic expansions, command
    substitutions, and variable expansions, are not examined in determining
    the matching `}'. If the variants with `+', `-', `=' or `?' occur within
    a double-quoted string, as an extension there may be unquoted parts (via
    double-quotes inside the expansion); `}' within such parts are also not
    examined in determining the matching `}'.

    The simplest form for parameter expansion is:

    ${parameter}

    The value, if any, of parameter is substituted.

    The parameter name or symbol can be enclosed in braces, which are
    optional except for positional parameters with more than one digit or
    when parameter is followed by a character that could be interpreted as
    part of the name.

    Ich glaube ich komme der Sache langsam näher. Der optional except ist hier die Hürde. Grundsätzlich wäre eine einfache var=string Zuweisung korrekter Weise eine ${var=string} schreibweise.

    Das unterschiedliche Verhalten aus default überschrieben oder nicht entsteht nicht durch den führenden : sondern findet bei der Parameter Zuweisung in den besonderen Formen von := oder = oder :- statt.

    Tschuess

    Kai

    --- GoldED+/LNX 1.1.4.7
    * Origin: Ihr... Ihr... Boah, ihr Praktiker ey! (2:240/77)