this post was submitted on 15 Jan 2025
571 points (98.3% liked)
linuxmemes
21826 readers
1008 users here now
Hint: :q!
Sister communities:
Community rules (click to expand)
1. Follow the site-wide rules
- Instance-wide TOS: https://legal.lemmy.world/tos/
- Lemmy code of conduct: https://join-lemmy.org/docs/code_of_conduct.html
2. Be civil
- Understand the difference between a joke and an insult.
- Do not harrass or attack members of the community for any reason.
- Leave remarks of "peasantry" to the PCMR community. If you dislike an OS/service/application, attack the thing you dislike, not the individuals who use it. Some people may not have a choice.
- Bigotry will not be tolerated.
- These rules are somewhat loosened when the subject is a public figure. Still, do not attack their person or incite harrassment.
3. Post Linux-related content
- Including Unix and BSD.
- Non-Linux content is acceptable as long as it makes a reference to Linux. For example, the poorly made mockery of
sudo
in Windows. - No porn. Even if you watch it on a Linux machine.
4. No recent reposts
- Everybody uses Arch btw, can't quit Vim, <loves/tolerates/hates> systemd, and wants to interject for a moment. You can stop now.
Please report posts and comments that break these rules!
Important: never execute code or follow advice that you don't understand or can't verify, especially here. The word of the day is credibility. This is a meme community -- even the most helpful comments might just be shitposts that can damage your system. Be aware, be smart, don't fork-bomb your computer.
founded 2 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
set -euo pipefail
is, in my opinion, an antipattern. This page does a really good job of explaining why. pipefail is occasionally useful, but should be toggled on and off as needed, not left on. IMO, people should just write shell the way they write go, handling every command that could fail individually. it's easy if you write adie
function like this:It only takes a little bit of extra effort to handle the errors individually, and you get much more reliable shell scripts. To replace -u, just use shellcheck with your editor when writing scripts. I'd also highly recommend https://mywiki.wooledge.org/ as a resource for all things POSIX shell or Bash.
Putting
or die “blah blah”
after every line in your script seems much less elegant than op’s solutionThe issue with
set -e
is that it's hideously broken and inconsistent. Let me copy the examples from the wiki I linked.Or, "so you think set -e is OK, huh?"
Exercise 1: why doesn't this example print anything?
Exercise 2: why does this one sometimes appear to work? In which versions of bash does it work, and in which versions does it fail?
Exercise 3: why aren't these two scripts identical?
Exercise 4: why aren't these two scripts identical?
Exercise 5: under what conditions will this fail?
And now, back to your regularly scheduled comment reply.
set -e
would absolutely be more elegant if it worked in a way that was easy to understand. I would be shouting its praises from my rooftop if it could make Bash into less of a pile of flaming plop. Unfortunately ,set -e
is, by necessity, a labyrinthian mess of fucked up hacks.Let me leave you with a allegory about
set -e
copied directly from that same wiki page. It's too long for me to post it in this comment, so I'll respond to myself.Woah, that
((i++))
triggered a memory I forgot about. I spent hours trying to figure out what fucked up my$?
one day.When I finally figured it out: "You've got to be kidding me."
When i fixed with
((++i))
: "SERIOUSLY! WTAF Bash!"