The Living Thing / Notebooks :

Surviving bash

The flagship product of modern unices is certainly better than anything other 80s shell

General, not OSX-specific or linux-specific, and see also shells to yak-shave your way into whole other shell paradigms. Or fish for a less awful user experience.

Basic syntax.

I just don’t care enough to remember. This makes me a Bad Hacker.

Command line tips

See command lines which are mostly bash specific because everything is hard in bash.

bash history

!n - the nth history, !-n the nth-most-recent !string refers to the most recent command in the history starting with string, !?string[?] refers to the most recent command containing string

whack this in .inputrc

set meta-flag on
set input-meta on
set output-meta on
set convert-meta off

"\ep": history-search-backward
"\en": history-search-backward
"\e[A": history-search-backward
"\e[B": history-search-forward

$if Bash
  Space: magic-space
$endif

Vars, expansions, filenames, whitespace hell

Tilde expansion

Tilde expansion is complicated. Best to avoid tildes and use ${HOME}.

files extension munging in bash

for file in *.html;
    mv "$file" "`basename $file .html`.txt";
done

or:

mv "$file" "${file%.html}.txt"

Don’t forget the quotes, or it will explode when you have spaces in your filenames and delete stuff that you loved. (I hate bash so hard. I should probably abandon it.)

For loops

Watch out for horrible problems with handling of delimeters. Anyway, for loops are not insane.

#!/bin/bash
for i in $( ls ); do
    echo item: $i
done

Init file madness

Weird bash syntax errors about ‘end of file’.