[nycbug-talk] nifty(1)

Matthew Story matt at tablethotels.com
Wed Dec 14 20:19:07 EST 2011


i believe that this is useful ... but i think this is yet more useful:

curl_ok() {
    curl -sL -w "\n%{http_code}\n" "$1" |
    awk 'BEGIN { 
        getline line 
    } { 
        print line; line=$0 
    } END { 
        if (line ~ /200/) { 
            print "curl: fatal: bad status code:", line | "cat - >&2"
            exit 111
        }
        exit 0
    }'
}
# now it exits non-0 for bad status
curl_ok 'nycbug.org' || exit $?

in either case, useful hack

On Dec 14, 2011, at 6:21 PM, Henry M wrote:

> Wouldn't it be nice to just 'man nifty' and a have a large collection of tricks? 
> 
> One nifty trick with curl and awk:
> 
> Curl a website and print it's status code only if it's the code you are looking for.
> 
> Example 1: (This will print 200.) 
> curl -sL -w "\n%{http_code}\n" "nycbug.org/" |
> awk 'BEGIN { getline line } { print line; line=$0 } END { if (line ~/200/) {print line;}}'
> 
> 
> Example 2: (This will not print 404)
> curl -sL -w "\n%{http_code}\n" "nycbug.org/" |
> awk 'BEGIN { getline line } { print line; line=$0 } END { if (line ~/404/) {print line;}}'
> 
> Useless? I say not! 
> 
> ~Henry
> 
> On Wed, Dec 14, 2011 at 6:13 PM, Isaac Levy <ike at blackskyresearch.net> wrote:
> On Dec 14, 2011, at 5:28 PM, Matthew Story wrote:
> > who's up next?
> This nifty(1) thread is a great idea!
> 
> "The 3-finger Claw Technique"  The sweetest 3 functions, ever.
> 
>  shout() { echo "$0: $*" >&2; }
>  barf() { shout "$*"; exit 111; }
>  safe() { "$@" || barf "cannot $*"; }
> 
> I use these daily, they're extremely cross-platform friendly in any bourne-derived shell I've  used in the last 3 years.
> 
> 
> safexample.sh :
> --
> #!/bin/sh
> 
> shout() { echo "$0: $*" >&2; }
> barf() { shout "$*"; exit 111; }
> safe() { "$@" || barf "cannot $*"; }
> 
> # consider the following lines
> safe cd /some/dir
> safe tar xzvfp /my/big/tarball.tbz
> 
> exit 0
> --
> 
> 
> In the above example, using 'safe' suddenly gives the user the following special powers:
> 
> 1) if '/some/dir' does not exist, the script will safely exit before that un-tarring does any damage.
> 
> 2) the actual 'directory does not exist' will return to stderr for the script, (as opposed to just telling us the useless fact that the enclosing script failed).
> Now bourne shell starts behaving like a modern language!  (ala Python/Ruby tracebacks, Perl errors, etc…)
> 
> Additonally, if you 'exit 0' at the end, you can run non-safe operations, and always be guaranteed that if the shell exits, it was 'complete'.
> An example:
> 
> # consider the following lines
> safe cd /some/dir
> tar xzvfp /my/big/tarball.tbz
> 
> Now, safe was removed from the un-tar command, right?  So, imaging tarballs created by people using a Mac (with HFS+ and some filesystem-specific sticky bit somewhere in the filesystem which was tar'd up).
> Now, you un-tar it on some *BSD or other *NIX box, and tar complains as it goes- and exits non-zero.  One way to handle this, is to consider the tar 'reliable', and not use safe for it.
> 
> Now, if we continue to be conscious of this simple safe/notsafe distinction with these scripts, they can be called by other safe scripts- and behave just like any respectable UNIX program!
> 
> Now, consider this crontab entry:
> 1       3       *       *       *       someuser flock -k /tmp/safexample.lock /path/to/safexample.sh
> 
> If it fails, (for bad perms, no tarball to unpack, etc…)  cron will actually have a reasonable message to email/log on failure!
> 
> 
> Thanks to the noble efforts of the Clan of the White Lotus, these 3 functions originate during the late thirteenth century, around Guangzhou.  It is rumored these 3 functions took 15 years to boil down- I beileve that after mercilessly abusing them for the last 3 years myself…  (I'm not kididng about that part!)
> 
> Attached, is another example with more bits.
> 
> 
> 
> _______________________________________________
> talk mailing list
> talk at lists.nycbug.org
> http://lists.nycbug.org/mailman/listinfo/talk
> 
> 
> _______________________________________________
> talk mailing list
> talk at lists.nycbug.org
> http://lists.nycbug.org/mailman/listinfo/talk

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.nycbug.org/pipermail/talk/attachments/20111214/b24f6729/attachment.html>


More information about the talk mailing list