Share your most embarrassing shell pipeline
Mike Lockhart

Mike Lockhart @sinewalker

About: I'm a web sysop and support engineer. My skills are mainly in back-end: Java, Linux, Python, PostgreSQL, Git, and GitLab. Currently I'm learning front-end skills: JavaScript, and Ruby.

Location:
Hobart
Joined:
Jul 17, 2019

Share your most embarrassing shell pipeline

Publish Date: Sep 15 '19
5 5

Sometimes airing your code smells can be cathartic, and motivate you to fix it.

Here's possibly the most embarrassing shell pipeline I currently have in my Bash dotfiles:

            \grep -Rn "alias ${1}=" ${DOTFILES}/source \
                | awk -F: '{print "⍺:\t" $3 "\t--> " $1 ":" $2}' \
                    | sed "s/${1}=//g"
Enter fullscreen mode Exit fullscreen mode

Yes, I'm combining all the filters, grep,awk, and sed to print out an information of where a shell alias is defined in my files. It's part of my describe function for handling aliases:

$ describe gdfs
⍺:      alias 'cpulimit -l 2 -p $(pgrep -f "crash_handler_token=")&'    --> /Users/mjl/.dotfiles/source/40_osx.sh:28
Enter fullscreen mode Exit fullscreen mode

I'm sure all of this can actually be done in awk alone (especially the sed part), but I haven't figured a way to make it so.

Comments 5 total

  • Lee
    LeeSep 15, 2019

    Noob here. In your first block, what are those backslashes \ doing at the end of the lines?

    • G.L Solaria
      G.L SolariaSep 15, 2019

      It is just to allow the one line to be broken across two lines. It aids readability because you do not have to scroll horizontally.

      • Mike Lockhart
        Mike LockhartSep 15, 2019

        Yes, there's a lot of different use for the back slash here. They all mean "escape" in different flavours.

        First escapes my grep alias and runs normal grep

        Then there is the slosh immediately before the newline, makes the line break but escapes the meaning as end-of-command to bash

        Then in the awk command there is \t which is an "escape code" for a TAB

      • Lee
        LeeSep 15, 2019

        Well he'll! Thanks!

        Excuse me as I go rewrite all my shell files

  • G.L Solaria
    G.L SolariaSep 15, 2019

    As for me and my embarrassing command lines, I did one recently:

    lxc network list | grep bridge | cut -f2 -d"|" | while read ii
    do
      lxc delete network $ii
    done
    

    I probably should have used

    lxc network list | nawk -F"|" '/\|/ && /bridge/ {system("lxc delete network " $2)}'
    
Add comment