Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (Cyborg)
  • No Skin
Collapse
Brand Logo

CIRCLE WITH A DOT

  1. Home
  2. Uncategorized
  3. I feel like I'm getting better at shell fu.

I feel like I'm getting better at shell fu.

Scheduled Pinned Locked Moved Uncategorized
29 Posts 14 Posters 0 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • gsuberland@chaos.socialG gsuberland@chaos.social

    I feel like I'm getting better at shell fu. I'm not necessarily "optimal" at it, but I'm figuring stuff out.

    last night's zsh one-liner, put together on my phone no less:

    find -s /dev -name 'da*' -exec smartctl -a {} \; | grep Power_On_Hours | cut -w -f 11 | xargs -n 1 -I {} sh -c 'echo $(( ({}-({}%(24*365))) / (24*365) ))y $(( ( {} - ({}-({}%(24*365))) ) / 24 ))d' \;

    it shows me how many power-on hours my disks have based on SMART data, converted into years and days.

    gsuberland@chaos.socialG This user is from outside of this forum
    gsuberland@chaos.socialG This user is from outside of this forum
    gsuberland@chaos.social
    wrote last edited by
    #2

    shells / coreutils could really use a built in way to parse and convert timespans, though. there's some limited ability within gnu versions of it, but it's kinda awkward and I can't use them anyway 'cos I'm on BSD.

    gsuberland@chaos.socialG 1 Reply Last reply
    0
    • gsuberland@chaos.socialG gsuberland@chaos.social

      I feel like I'm getting better at shell fu. I'm not necessarily "optimal" at it, but I'm figuring stuff out.

      last night's zsh one-liner, put together on my phone no less:

      find -s /dev -name 'da*' -exec smartctl -a {} \; | grep Power_On_Hours | cut -w -f 11 | xargs -n 1 -I {} sh -c 'echo $(( ({}-({}%(24*365))) / (24*365) ))y $(( ( {} - ({}-({}%(24*365))) ) / 24 ))d' \;

      it shows me how many power-on hours my disks have based on SMART data, converted into years and days.

      acsawdey@fosstodon.orgA This user is from outside of this forum
      acsawdey@fosstodon.orgA This user is from outside of this forum
      acsawdey@fosstodon.org
      wrote last edited by
      #3

      @gsuberland one-liners like that are pretty excellent. I tend use awk for stuff like that sh command at the end, I think it doesn't require quite so many parens and you also probably don't need the cut because you can just use $11 in awk. Plus you can do summary statistics and print out in END{ }.

      gsuberland@chaos.socialG 1 Reply Last reply
      0
      • acsawdey@fosstodon.orgA acsawdey@fosstodon.org

        @gsuberland one-liners like that are pretty excellent. I tend use awk for stuff like that sh command at the end, I think it doesn't require quite so many parens and you also probably don't need the cut because you can just use $11 in awk. Plus you can do summary statistics and print out in END{ }.

        gsuberland@chaos.socialG This user is from outside of this forum
        gsuberland@chaos.socialG This user is from outside of this forum
        gsuberland@chaos.social
        wrote last edited by
        #4

        @acsawdey I've tried to use awk a few times but I find the syntax non-obvious (in a similar way to perl) so it never sticks

        honestly `python -c` would probably be easier for me to remember lol

        brouhaha@mastodon.socialB 1 Reply Last reply
        0
        • gsuberland@chaos.socialG gsuberland@chaos.social

          shells / coreutils could really use a built in way to parse and convert timespans, though. there's some limited ability within gnu versions of it, but it's kinda awkward and I can't use them anyway 'cos I'm on BSD.

          gsuberland@chaos.socialG This user is from outside of this forum
          gsuberland@chaos.socialG This user is from outside of this forum
          gsuberland@chaos.social
          wrote last edited by
          #5

          the main annoyance I have with shell stuff is how the command names defy discoverability.

          "I would like to flush my current shell history to the history file"

          "ok run fc -W"

          "huh. what does fc stand for?"

          "fix command"

          "... ok"

          asmcbain@woof.techA gsuberland@chaos.socialG elithebearded@fed.qaz.redE mmu_man@m.g3l.orgM 4 Replies Last reply
          1
          0
          • gsuberland@chaos.socialG gsuberland@chaos.social

            the main annoyance I have with shell stuff is how the command names defy discoverability.

            "I would like to flush my current shell history to the history file"

            "ok run fc -W"

            "huh. what does fc stand for?"

            "fix command"

            "... ok"

            asmcbain@woof.techA This user is from outside of this forum
            asmcbain@woof.techA This user is from outside of this forum
            asmcbain@woof.tech
            wrote last edited by
            #6

            @gsuberland but sometimes they lead to fun stuff:

            `git push -fu [...]`

            😁

            1 Reply Last reply
            0
            • gsuberland@chaos.socialG gsuberland@chaos.social

              the main annoyance I have with shell stuff is how the command names defy discoverability.

              "I would like to flush my current shell history to the history file"

              "ok run fc -W"

              "huh. what does fc stand for?"

              "fix command"

              "... ok"

              gsuberland@chaos.socialG This user is from outside of this forum
              gsuberland@chaos.socialG This user is from outside of this forum
              gsuberland@chaos.social
              wrote last edited by
              #7

              I also hate that shell builtins don't have manpages. I have looked up the justification for this and I find it deeply unsatisfying.

              classabbyamp@chaos.socialC funkylab@mastodon.socialF f3715h@rubber.socialF tj@altelectron.org.ukT sludgephd@mastodon.socialS 8 Replies Last reply
              0
              • gsuberland@chaos.socialG gsuberland@chaos.social

                I feel like I'm getting better at shell fu. I'm not necessarily "optimal" at it, but I'm figuring stuff out.

                last night's zsh one-liner, put together on my phone no less:

                find -s /dev -name 'da*' -exec smartctl -a {} \; | grep Power_On_Hours | cut -w -f 11 | xargs -n 1 -I {} sh -c 'echo $(( ({}-({}%(24*365))) / (24*365) ))y $(( ( {} - ({}-({}%(24*365))) ) / 24 ))d' \;

                it shows me how many power-on hours my disks have based on SMART data, converted into years and days.

                classabbyamp@chaos.socialC This user is from outside of this forum
                classabbyamp@chaos.socialC This user is from outside of this forum
                classabbyamp@chaos.social
                wrote last edited by
                #8

                @gsuberland smartctl has a json output option, which would mean jq could give something maybe more readable, but the format it emits is kinda annoying... it's like tables as json

                gsuberland@chaos.socialG 1 Reply Last reply
                0
                • gsuberland@chaos.socialG gsuberland@chaos.social

                  I also hate that shell builtins don't have manpages. I have looked up the justification for this and I find it deeply unsatisfying.

                  classabbyamp@chaos.socialC This user is from outside of this forum
                  classabbyamp@chaos.socialC This user is from outside of this forum
                  classabbyamp@chaos.social
                  wrote last edited by
                  #9

                  @gsuberland in zsh, it's all one page, zshbuiltins(1)

                  gsuberland@chaos.socialG 1 Reply Last reply
                  0
                  • gsuberland@chaos.socialG gsuberland@chaos.social

                    I also hate that shell builtins don't have manpages. I have looked up the justification for this and I find it deeply unsatisfying.

                    funkylab@mastodon.socialF This user is from outside of this forum
                    funkylab@mastodon.socialF This user is from outside of this forum
                    funkylab@mastodon.social
                    wrote last edited by
                    #10

                    @gsuberland not on their own; bash builtins share one giant manpage you never want when you get it, and never when you want it. man test.
                    zsh has `man zshbuiltins`.

                    gsuberland@chaos.socialG 1 Reply Last reply
                    0
                    • classabbyamp@chaos.socialC classabbyamp@chaos.social

                      @gsuberland smartctl has a json output option, which would mean jq could give something maybe more readable, but the format it emits is kinda annoying... it's like tables as json

                      gsuberland@chaos.socialG This user is from outside of this forum
                      gsuberland@chaos.socialG This user is from outside of this forum
                      gsuberland@chaos.social
                      wrote last edited by
                      #11

                      @classabbyamp yeah you could do

                      smartctl -a -j /dev/da0 | jq '.ata_smart_attributes.table[] | select(.name=="Power_On_Hours") | .raw.value'

                      but the grep and cut was shorter here

                      1 Reply Last reply
                      0
                      • classabbyamp@chaos.socialC classabbyamp@chaos.social

                        @gsuberland in zsh, it's all one page, zshbuiltins(1)

                        gsuberland@chaos.socialG This user is from outside of this forum
                        gsuberland@chaos.socialG This user is from outside of this forum
                        gsuberland@chaos.social
                        wrote last edited by
                        #12

                        @classabbyamp what a mess

                        1 Reply Last reply
                        0
                        • funkylab@mastodon.socialF funkylab@mastodon.social

                          @gsuberland not on their own; bash builtins share one giant manpage you never want when you get it, and never when you want it. man test.
                          zsh has `man zshbuiltins`.

                          gsuberland@chaos.socialG This user is from outside of this forum
                          gsuberland@chaos.socialG This user is from outside of this forum
                          gsuberland@chaos.social
                          wrote last edited by
                          #13

                          @funkylab which then makes it impossible to search >_<

                          funkylab@mastodon.socialF 1 Reply Last reply
                          0
                          • gsuberland@chaos.socialG gsuberland@chaos.social

                            @funkylab which then makes it impossible to search >_<

                            funkylab@mastodon.socialF This user is from outside of this forum
                            funkylab@mastodon.socialF This user is from outside of this forum
                            funkylab@mastodon.social
                            wrote last edited by
                            #14

                            @gsuberland yep, exaxtly my gripe. `man zsh-for` or even `man zsh for` would be possible on modern `man`s

                            1 Reply Last reply
                            0
                            • gsuberland@chaos.socialG gsuberland@chaos.social

                              @acsawdey I've tried to use awk a few times but I find the syntax non-obvious (in a similar way to perl) so it never sticks

                              honestly `python -c` would probably be easier for me to remember lol

                              brouhaha@mastodon.socialB This user is from outside of this forum
                              brouhaha@mastodon.socialB This user is from outside of this forum
                              brouhaha@mastodon.social
                              wrote last edited by
                              #15

                              @acsawdey @gsuberland
                              Awk is a bit awkward, but it's a piece of cake compared to Perl. But I, too, prefer Python.

                              acsawdey@fosstodon.orgA 1 Reply Last reply
                              0
                              • brouhaha@mastodon.socialB brouhaha@mastodon.social

                                @acsawdey @gsuberland
                                Awk is a bit awkward, but it's a piece of cake compared to Perl. But I, too, prefer Python.

                                acsawdey@fosstodon.orgA This user is from outside of this forum
                                acsawdey@fosstodon.orgA This user is from outside of this forum
                                acsawdey@fosstodon.org
                                wrote last edited by
                                #16

                                @brouhaha @gsuberland well, yes for anything other than 1-liners I too prefer python. But awk somehow is very amenable to doing tiny things like this:

                                awk '{count[$0]++} END{for(x in count) { printf("%-10d %s\n",count[x],x) } } ' | sort -n

                                paul_ipv6@infosec.exchangeP 1 Reply Last reply
                                0
                                • gsuberland@chaos.socialG gsuberland@chaos.social

                                  I also hate that shell builtins don't have manpages. I have looked up the justification for this and I find it deeply unsatisfying.

                                  f3715h@rubber.socialF This user is from outside of this forum
                                  f3715h@rubber.socialF This user is from outside of this forum
                                  f3715h@rubber.social
                                  wrote last edited by
                                  #17

                                  @gsuberland consider toybox?

                                  gsuberland@chaos.socialG 1 Reply Last reply
                                  0
                                  • gsuberland@chaos.socialG gsuberland@chaos.social

                                    the main annoyance I have with shell stuff is how the command names defy discoverability.

                                    "I would like to flush my current shell history to the history file"

                                    "ok run fc -W"

                                    "huh. what does fc stand for?"

                                    "fix command"

                                    "... ok"

                                    elithebearded@fed.qaz.redE This user is from outside of this forum
                                    elithebearded@fed.qaz.redE This user is from outside of this forum
                                    elithebearded@fed.qaz.red
                                    wrote last edited by
                                    #18

                                    @gsuberland

                                    I use fc (through aliases) all the time and I have never heard a good explanation of the name.

                                    100% agreed discoverability is a huge problem in shell commands, built-in or not. I wrote a tool, "nums",then literally years later found out that "seq" does almost the same thing. Mine is only better in being smart about zero padding: "nums 01-10" pads, "nums 1-10" doesn't

                                    1 Reply Last reply
                                    0
                                    • R relay@relay.an.exchange shared this topic
                                    • gsuberland@chaos.socialG gsuberland@chaos.social

                                      I also hate that shell builtins don't have manpages. I have looked up the justification for this and I find it deeply unsatisfying.

                                      tj@altelectron.org.ukT This user is from outside of this forum
                                      tj@altelectron.org.ukT This user is from outside of this forum
                                      tj@altelectron.org.uk
                                      wrote last edited by
                                      #19
                                      @gsuberland this annoys me so much. Even more when I get the builtin man page for something that is also a standalone tool. Which has a man page
                                      1 Reply Last reply
                                      0
                                      • f3715h@rubber.socialF f3715h@rubber.social

                                        @gsuberland consider toybox?

                                        gsuberland@chaos.socialG This user is from outside of this forum
                                        gsuberland@chaos.socialG This user is from outside of this forum
                                        gsuberland@chaos.social
                                        wrote last edited by
                                        #20

                                        @F3715H I read the readme and it isn't clear to me what toybox is. it also exclusively mentions Linux, which I don't use.

                                        1 Reply Last reply
                                        0
                                        • gsuberland@chaos.socialG gsuberland@chaos.social

                                          I also hate that shell builtins don't have manpages. I have looked up the justification for this and I find it deeply unsatisfying.

                                          sludgephd@mastodon.socialS This user is from outside of this forum
                                          sludgephd@mastodon.socialS This user is from outside of this forum
                                          sludgephd@mastodon.social
                                          wrote last edited by
                                          #21

                                          @gsuberland in fish, this just works. Probably required a blood sacrifice of them though.

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups