Explanation for newbies:

  • Shell is the programming language that you use when you open a terminal on linux or mac os. Well, actually “shell” is a family of languages with many different implementations (bash, dash, ash, zsh, ksh, fish, …)

  • Writing programs in shell (called “shell scripts”) is a harrowing experience because the language is optimized for interactive use at a terminal, not writing extensive applications

  • The two lines in the meme change the shell’s behavior to be slightly less headache-inducing for the programmer:

    • set -euo pipefail is the short form of the following three commands:
      • set -e: exit on the first command that fails, rather than plowing through ignoring all errors
      • set -u: treat references to undefined variables as errors
      • set -o pipefail: If a command piped into another command fails, treat that as an error
    • export LC_ALL=C tells other programs to not do weird things depending on locale. For example, it forces seq to output numbers with a period as the decimal separator, even on systems where coma is the default decimal separator (russian, dutch, etc.).
  • The title text references “posix”, which is a document that standardizes, among other things, what features a shell must have. Posix does not require a shell to implement pipefail, so if you want your script to run on as many different platforms as possible, then you cannot use that feature.

  • XIN@lemm.ee
    link
    fedilink
    arrow-up
    9
    ·
    11 hours ago

    The few times I’ve used shell for programming it was in strict work environments where anything compiled was not allowed without a ton of red tape.

    • smeg@feddit.uk
      link
      fedilink
      English
      arrow-up
      4
      ·
      11 hours ago

      Wouldn’t something interpreted like python be a better solution?

      • Gork@lemm.ee
        link
        fedilink
        arrow-up
        4
        ·
        10 hours ago

        For more complicated input/output file handling, certainly.

        Little shell scripts do great though if all you need to do is concatenate files by piping them.

        It’s like the Internet, it’s not one big truck but a series of tubes.

        • smeg@feddit.uk
          link
          fedilink
          English
          arrow-up
          2
          ·
          9 hours ago

          Yep, in my mind piping together other commands is scripting not programming, exactly what shell scripts are for!

          • Gork@lemm.ee
            link
            fedilink
            arrow-up
            2
            ·
            5 hours ago

            With enough regex and sed/awk you might be able to make even complicated stuff work. I’m not a regex guru (but I do occasionally dabble in the dark arts).