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 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
    #1

    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 acsawdey@fosstodon.orgA classabbyamp@chaos.socialC 3 Replies Last reply
    1
    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.

      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
                                          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