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.
Top comments (5)
As for me and my embarrassing command lines, I did one recently:
I probably should have used
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