<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>i believe that this is useful ... but i think this is yet more useful:</div><div><br></div><div>curl_ok() {</div><div>    curl -sL -w "\n%{http_code}\n" "$1" |</div><div>    awk 'BEGIN { </div><div>        getline line </div><div>    } { </div><div>        print line; line=$0 </div><div>    } END { </div><div>        if (line ~ /200/) { </div><div>            print "curl: fatal: bad status code:", line | "cat - >&2"</div><div>            exit 111</div><div>        }</div><div>        exit 0</div><div>    }'</div><div>}</div><div># now it exits non-0 for bad status</div><div>curl_ok 'nycbug.org' || exit $?</div><div><br></div><div>in either case, useful hack</div><br><div><div>On Dec 14, 2011, at 6:21 PM, Henry M wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">Wouldn't
 it be nice to just 'man nifty' and a have a large collection of tricks? <br>
<br>
One nifty trick with curl and awk:<br>
<br>
Curl a website and print it's status code only if it's the code you are looking for.<br>
<br>
Example 1: (This will print 200.) <br>
curl -sL -w "\n%{http_code}\n" "<a href="http://nycbug.org/">nycbug.org/</a>" |<br>
awk 'BEGIN { getline line } { print line; line=$0 } END { if (line ~/200/) {print line;}}'<br>
<br>
<br>
Example 2: (This will not print 404)<br>
curl -sL -w "\n%{http_code}\n" "<a href="http://nycbug.org/">nycbug.org/</a>" |<br>

awk 'BEGIN { getline line } { print line; line=$0 } END { if (line ~/404/) {print line;}}'<br><br>
Useless? I say not! <br>
<br>
~Henry<br><br><div class="gmail_quote">On Wed, Dec 14, 2011 at 6:13 PM, Isaac Levy <span dir="ltr"><<a href="mailto:ike@blackskyresearch.net">ike@blackskyresearch.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">On Dec 14, 2011, at 5:28 PM, Matthew Story wrote:<br>
</div>> who's up next?<br>
This nifty(1) thread is a great idea!<br>
<br>
"The 3-finger Claw Technique"  The sweetest 3 functions, ever.<br>
<br>
  shout() { echo "$0: $*" >&2; }<br>
  barf() { shout "$*"; exit 111; }<br>
  safe() { "$@" || barf "cannot $*"; }<br>
<br>
I use these daily, they're extremely cross-platform friendly in any bourne-derived shell I've  used in the last 3 years.<br>
<br>
<br>
safexample.sh :<br>
--<br>
#!/bin/sh<br>
<br>
shout() { echo "$0: $*" >&2; }<br>
barf() { shout "$*"; exit 111; }<br>
safe() { "$@" || barf "cannot $*"; }<br>
<br>
# consider the following lines<br>
safe cd /some/dir<br>
safe tar xzvfp /my/big/tarball.tbz<br>
<br>
exit 0<br>
--<br>
<br>
<br>
In the above example, using 'safe' suddenly gives the user the following special powers:<br>
<br>
1) if '/some/dir' does not exist, the script will safely exit before that un-tarring does any damage.<br>
<br>
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).<br>
Now bourne shell starts behaving like a modern language!  (ala Python/Ruby tracebacks, Perl errors, etc…)<br>
<br>
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'.<br>
An example:<br>
<br>
# consider the following lines<br>
safe cd /some/dir<br>
tar xzvfp /my/big/tarball.tbz<br>
<br>
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).<br>
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.<br>
<br>
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!<br>
<br>
Now, consider this crontab entry:<br>
1       3       *       *       *       someuser flock -k /tmp/safexample.lock /path/to/safexample.sh<br>
<br>
If it fails, (for bad perms, no tarball to unpack, etc…)  cron will actually have a reasonable message to email/log on failure!<br>
<br>
<br>
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!)<br>

<br>
Attached, is another example with more bits.<br>
<br>
<br>
<br>_______________________________________________<br>
talk mailing list<br>
<a href="mailto:talk@lists.nycbug.org">talk@lists.nycbug.org</a><br>
<a href="http://lists.nycbug.org/mailman/listinfo/talk" target="_blank">http://lists.nycbug.org/mailman/listinfo/talk</a><br>
<br></blockquote></div><br>
_______________________________________________<br>talk mailing list<br><a href="mailto:talk@lists.nycbug.org">talk@lists.nycbug.org</a><br>http://lists.nycbug.org/mailman/listinfo/talk<br></blockquote></div><br></body></html>