Share your most embarrassing shell pipeline

github logo ・1 min read

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"

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

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.

twitter logo DISCUSS (5)
markdown guide
 

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)}'
 

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

 

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.

 

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

 

Well he'll! Thanks!

Excuse me as I go rewrite all my shell files

Classic DEV Post from Jul 6

A Series of My Unfortunate Mistakes (When Writing Tests)

Not a series, actually. Just this single article, that's just a reference to... nevermind.

Mike Lockhart profile image
web sysop, mainly back-end, linux, python, postgresql. learning front-end