this post was submitted on 10 Jun 2023
20 points (100.0% liked)

Shell Scripting

1367 readers
1 users here now

From Ash, Bash and Csh to Xonsh, Ysh and Zsh; all shell languages are welcome here!

Rules:
  1. Follow Lemmy rules!
  2. Posts must relate to shell scripting. (See bottom of sidebar for more information.)
  3. Only make helpful replies to questions. This is not the place for low effort joke answers.
  4. No discussion about piracy or hacking.
  5. If you find a solution to your problem by other means, please take your time to write down the steps you used to solve your problem in the original post. You can potentially help others having the same problem!
  6. These rules will change as the community grows.

Keep posts about shell scripting! Here are some guidelines to help:


In general, if your submission text is primarily shell code, then it is welcome here!

founded 2 years ago
MODERATORS
 

A huge part of programming in general is learning how to troubleshoot something, not just having someone else fix it for you. One of the basic ways to do that is by tracing. Not only can this help you figure out what your script is doing and how it's doing it, but in the event that you need help from another person, posting the output can be beneficial to the person attempting to help.

(If your shell isn't listed and you know how to enable tracing, comment below and I'll add it to the table!)

Shell How to enable tracing
Bash set -x or set -o xtrace
Fish set fish_trace on
sh set -x
Zsh set -x or setopt xtrace

Also, writing scripts in an IDE that supports your language. syntax highlighting can immediately tell you that you're doing something wrong.

If an IDE isn't an option and you're using Bash or Sh, you can paste your script into https://www.shellcheck.net/

(Inspired by this post on /r/bash)

you are viewing a single comment's thread
view the rest of the comments
[–] erlingur 5 points 2 years ago* (last edited 2 years ago) (1 children)

Can someone post an example of what this actually does? Haven't seen this before and I can't seem to easily see an example of what effect this has on your scripts. I'm guessing by reading some links that it outputs all commands that a script ran? Is that right?

[–] tonkaTruck 7 points 2 years ago* (last edited 2 years ago) (1 children)

It's basically doing step by step print lines for you. If you have easy access to a bash prompt here's an example (for clarity, the lines leading with $ are what I typed into the shell. The lines without are what is output'd):


$ set -x
$ echo `expr 10 + 20 `
++ expr 10 + 20
+ echo 30
30

$ set +x
$ echo `expr 10 + 20 `
30

You see how the first example broke down what happened bit by bit and the + noted the depth of interpretation for the line? This basically helps debug narly scripts ... which if they're narly enough ... just rewrite them in a "proper" language.

What's that old google adage ( https://google.github.io/styleguide/shellguide.html )

If you are writing a script that is more than 100 lines long, or that uses non-straightforward control flow logic, you should rewrite it in a more structured language now.

[–] erlingur 4 points 2 years ago

Ohhh that's nice! That's genuinely super helpful! Never knew about this one, thanks!