<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Shell on traviscj/blog</title>
    <link>https://traviscj.com/blog/tags/shell/</link>
    <description>Recent content in Shell on traviscj/blog</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 21 Feb 2019 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://traviscj.com/blog/tags/shell/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>smart arguments</title>
      <link>https://traviscj.com/blog/post/2019-02-21-smart-arguments/</link>
      <pubDate>Thu, 21 Feb 2019 00:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2019-02-21-smart-arguments/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s easy to love the terseness one can get out of a command-line tool with a &amp;ldquo;pass by order&amp;rdquo; convention.&#xA;For example, maybe I run something like&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;deploy myapp sea2 production&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;to deploy an application called &lt;code&gt;myapp&lt;/code&gt; to the second &lt;strong&gt;production&lt;/strong&gt; datacenter near Seattle.&#xA;This works great, except now I need to remember the order of arguments is: &lt;code&gt;deploy [app] [datacenter] [environment]&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The typical solve for this problem is introducing named arguments, so you&amp;rsquo;d end up with&lt;/p&gt;</description>
    </item>
    <item>
      <title>Naming is hard (so don&#39;t)</title>
      <link>https://traviscj.com/blog/post/2018-10-07-naming_is_hard_so_dont/</link>
      <pubDate>Sun, 07 Oct 2018 02:31:43 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2018-10-07-naming_is_hard_so_dont/</guid>
      <description>&lt;p&gt;A lot of times I just want to &lt;strong&gt;record&lt;/strong&gt; something.&#xA;This should be one of those things computers are good at.&#xA;Turns out this is a bit harder than it seems: many editors make you &lt;em&gt;name&lt;/em&gt; a file to save it.&lt;/p&gt;&#xA;&lt;p&gt;One easy-sounding way to record something is:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;open up a text editor&lt;/li&gt;&#xA;&lt;li&gt;mash the keyboard until the thought is out of your head and into the text editor&lt;/li&gt;&#xA;&lt;li&gt;(hard part starts) what do we name that file?&lt;/li&gt;&#xA;&lt;li&gt;where do we put that file?&lt;/li&gt;&#xA;&lt;li&gt;do we remember to save that file, given the difficulty of (3) &amp;amp; (4)?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I think picking names &lt;em&gt;too early&lt;/em&gt; is at best a minor annoyance, and at worst a pretty major distraction.&lt;/p&gt;</description>
    </item>
    <item>
      <title>christmas commute</title>
      <link>https://traviscj.com/blog/post/2016-12-29-christmas_commute/</link>
      <pubDate>Thu, 29 Dec 2016 00:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2016-12-29-christmas_commute/</guid>
      <description>&lt;p&gt;I did a 725-mile drive yesterday from Prosser, WA to San Francisco, CA.&#xA;I captured the daylight hours with a GoPro timelapse and turned it into a video!&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;This was the actual loop we took, including the trip up to Washington.&#xA;We spent two nights in Oregon &amp;ndash; one in Grants Pass and one in Portland.&lt;/p&gt;&#xA;&lt;p&gt;![]({{ site.baseurl }}/assets/christmas_commute_s.png)&lt;/p&gt;&#xA;&lt;p&gt;My GoPro mount held the pictures upside down, so I transformed all of them with a quick&lt;/p&gt;</description>
    </item>
    <item>
      <title>build_json.sh</title>
      <link>https://traviscj.com/blog/post/2015-08-19-build_json.sh/</link>
      <pubDate>Wed, 19 Aug 2015 00:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2015-08-19-build_json.sh/</guid>
      <description>&lt;p&gt;This might seem silly, but I&amp;rsquo;ve beeing playing with some&#xA;&lt;a href=&#34;http://traviscj.com/ZeroBin/?1d4c5e66662c6306#V91+G7w0NYxN4ui/sDPBivPA8Fo5PzB7mZHAPboau7U=&#34;&gt;json.sh&lt;/a&gt; scripts&#xA;that build legitimate json bodies and are easily filled into a shell script variable as needed.&lt;/p&gt;&#xA;&lt;p&gt;The basic driving idea was that there are lots of slick ways to pull data &lt;em&gt;out&lt;/em&gt; of JSON(either by programming something with python&amp;rsquo;s json or running a command line tool like jq or whatever), but not as many friendly ways to build some JSON out of a given token or whatever.&#xA;Often, you have a list of identifiers and you need to build a bunch of JSON blobs from that list.&lt;/p&gt;</description>
    </item>
    <item>
      <title>don&#39;t poll</title>
      <link>https://traviscj.com/blog/post/2014-10-15-dont_poll/</link>
      <pubDate>Wed, 15 Oct 2014 00:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2014-10-15-dont_poll/</guid>
      <description>&lt;p&gt;A while ago, I wrote down a list of clever life rules in my day-to-day notebook.&#xA;One of them was &amp;ldquo;don&amp;rsquo;t poll&amp;rdquo;.&#xA;To say a bit more about it, don&amp;rsquo;t spent time waiting for things to finish and checking them constantly.&lt;/p&gt;&#xA;&lt;p&gt;A more concrete example:&#xA;I find myself running terminal commands that take ~5 minutes, and then wasting ~5 minutes watching them.&#xA;This is pretty stupid.&#xA;So what I have started doing instead is run something like&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ some_long_command&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; ... scroll scroll scroll ... &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; ... waiting &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; it to finish ... &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; ... give up ... &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;terminal-notifier -message &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;some_long_command done&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; ... go &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; something &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; ... &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;Then, later I see a notification:&#xA;&lt;img src=&#34;notification_finally_done.png&#34; alt=&#34;notification for finally done&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>launchd as cron crash course</title>
      <link>https://traviscj.com/blog/post/2014-08-08-launchd_as_cron_crash_course/</link>
      <pubDate>Fri, 08 Aug 2014 00:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2014-08-08-launchd_as_cron_crash_course/</guid>
      <description>&lt;p&gt;insert&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&#xA;&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&#xA;&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&#xA;&amp;lt;dict&amp;gt;&#xA;        &amp;lt;key&amp;gt;Label&amp;lt;/key&amp;gt;&#xA;        &amp;lt;string&amp;gt;com.whatever.five_after&amp;lt;/string&amp;gt;&#xA;        &amp;lt;key&amp;gt;ProgramArguments&amp;lt;/key&amp;gt;&#xA;        &amp;lt;array&amp;gt;&#xA;                &amp;lt;string&amp;gt;echo just ran &amp;gt; /tmp/whatever_five_after&amp;lt;/string&amp;gt;&#xA;        &amp;lt;/array&amp;gt;&#xA;        &amp;lt;key&amp;gt;StartCalendarInterval&amp;lt;/key&amp;gt;&#xA;        &amp;lt;dict&amp;gt;&#xA;                &amp;lt;key&amp;gt;Minute&amp;lt;/key&amp;gt;&amp;lt;integer&amp;gt;5&amp;lt;/integer&amp;gt;&#xA;        &amp;lt;/dict&amp;gt;&#xA;&amp;lt;/dict&amp;gt;&#xA;&amp;lt;/plist&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;into &lt;code&gt;$HOME/Library/LaunchAgents/com.whatever.five_after.plist&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you call a script in the ProgramArguments section, remember to make it executable and define the script properly.&lt;/p&gt;&#xA;&lt;p&gt;Run&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;launchctl load $HOME/Library/LaunchAgents/com.whatever.five_after.plist&#xA;launchctl start com.whatever.five_after&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Can also run every N seconds with&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;key&amp;gt;StartInterval&amp;lt;/key&amp;gt;&amp;lt;integer&amp;gt;N&amp;lt;/integer&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Can also check the status with&lt;/p&gt;</description>
    </item>
    <item>
      <title>piping for fun and profit</title>
      <link>https://traviscj.com/blog/post/2014-05-29-piping_for_fun_and_profit/</link>
      <pubDate>Thu, 29 May 2014 00:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2014-05-29-piping_for_fun_and_profit/</guid>
      <description>&lt;p&gt;I recently discovered something pretty cool: groovy, and in particular groovysh. It lets you do cool stuff like run&#xA;JVM functions:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;➜  ~  groovysh&#xA;Groovy Shell (2.3.3, JVM: 1.8.0)&#xA;Type &#39;:help&#39; or &#39;:h&#39; for help.&#xA;-------------------------------------------------------------------------------&#xA;groovy:000&amp;gt; new Random().nextInt()&#xA;===&amp;gt; 909782845&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But the sad part is that it seems pretty slow on my machine:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;➜  ~  time (echo :q | groovysh)&#xA;Groovy Shell (2.3.3, JVM: 1.8.0)&#xA;Type &#39;:help&#39; or &#39;:h&#39; for help.&#xA;-------------------------------------------------------------------------------&#xA;groovy:000&amp;gt; :q&#xA;( echo :q | groovysh; )  16.56s user 0.31s system 201% cpu 8.384 total&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;That&amp;rsquo;s more than 8 seconds just to start up and shut down a prompt that I might just run one command in!&lt;/p&gt;</description>
    </item>
    <item>
      <title>some setup notes</title>
      <link>https://traviscj.com/blog/post/2013-10-27-some_setup_notes/</link>
      <pubDate>Sun, 27 Oct 2013 00:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2013-10-27-some_setup_notes/</guid>
      <description>&lt;h2 id=&#34;zsh&#34;&gt;zsh&lt;/h2&gt;&#xA;&lt;p&gt;Zsh is an amazing (mostly) drop-in replacement for bash.&lt;/p&gt;&#xA;&lt;p&gt;On OSX, just run&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt; brew install zsh&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You also want to install oh-my-zsh.&lt;/p&gt;&#xA;&lt;p&gt;I went a little crazy with plugins. My list is:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;plugins=(autojump brew git git-flow gnu-utils gpg2 osx textmate zsh-syntax-highlighting history-substring-search)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;ssh&#34;&gt;SSH&lt;/h2&gt;&#xA;&lt;p&gt;I ssh a lot. So I have a bunch of host entries in my .ssh/config file. Each looks like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Host [shortname]&#xA;     Hostname [hostname]&#xA;     User     [username for hostname]&#xA;     IdentityFile [my home directory]/.ssh/[id_rsa file for this host]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You also need identity files for hosts you use. I tend to use a different one on each host I connect to; some might consider this overly paranoid. Probably it&amp;rsquo;d be better to use 1 key but only for a shorter period of time. In any case, you need to use&lt;/p&gt;</description>
    </item>
    <item>
      <title>more stupid matlab tricks</title>
      <link>https://traviscj.com/blog/post/2012-09-28-more_stupid_matlab_tricks/</link>
      <pubDate>Fri, 28 Sep 2012 00:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2012-09-28-more_stupid_matlab_tricks/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been setting up long-ish runs on my MATLAB instance lately, which is nice because I can wanter off to do something else. The trouble is that I occasionally forget to come back or refocus on work again.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve come up with two solutions to this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The first is to use growlnotify to pop up a persistant growl message. This works well enough as long as I&amp;rsquo;m at the computer:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;system(&amp;#39;growlnotify -s -m &amp;#34;somefile is done&amp;#34;&amp;#39;)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;For more extended aways or if I&amp;rsquo;m going to take a nap while it runs, I might do something more like:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;system(&amp;#39;echo &amp;#34;matlab: uflX_aw_constr_log_5_15 done&amp;#34; | msmtp -a traviscj (mycell)@txt.att.net&amp;#39;)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You need some setup before this works: I did a &lt;em&gt;brew install msmtp&lt;/em&gt; and set up a .msmtprc file. After that, it should work goldenly, at least for AT&amp;amp;T customers. Others might need to look up their email/sms gateway number.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ZSH and scp/rsync globbing</title>
      <link>https://traviscj.com/blog/post/2010-05-25-zsh_and_scprsync_globbing/</link>
      <pubDate>Tue, 25 May 2010 00:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2010-05-25-zsh_and_scprsync_globbing/</guid>
      <description>&lt;p&gt;I finally got annoyed at typing&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;tjohnson&amp;gt; scp tcj:*txt .&#xA;zsh: no matches found: tcj:*txt&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I’d always fixed this by the up-CTRL-A-over-over-over-over-quote-CTRL-E-over-over-quote method, ie&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;tjohnson&amp;gt; scp &amp;#34;tcj:*txt&amp;#34; .&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;but the more proper and less annoying version is&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;tjohnson&amp;gt; scp tcj:\*txt .&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;However, in the spirit of inspired overkill, there are a couple other options. You can define some new aliases with&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;alias scp=&amp;#39;noglob scp&amp;#39;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;but that hardly counts as overkill, so instead I edited my .zshrc to include&lt;/p&gt;</description>
    </item>
    <item>
      <title>Minor OS X Shell Shortcomings</title>
      <link>https://traviscj.com/blog/post/2008-10-19-minor_os_x_shell_shortcomings/</link>
      <pubDate>Sun, 19 Oct 2008 00:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2008-10-19-minor_os_x_shell_shortcomings/</guid>
      <description>&lt;p&gt;In spite of the fact that a lot of people seem to loathe the colorized ls functionality, I sortof grew up on it(so to speak). OS X, by default, does not have this functionality(well, at least, GNU&amp;rsquo;s &amp;ndash;color option never works). I figured the quick and easy way to solve this was to install coreutils, but I found another option. It appears OSX included a version of ls that works with ls -G. The coreutils one is (by it&amp;rsquo;s virtue as a GNU tool) probably more feature-driven, but realiasing it as&lt;/p&gt;</description>
    </item>
    <item>
      <title>Johnson vs Acronis, Pt 2</title>
      <link>https://traviscj.com/blog/post/2008-08-04-johnson_vs_acronis_pt_2/</link>
      <pubDate>Mon, 04 Aug 2008 00:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2008-08-04-johnson_vs_acronis_pt_2/</guid>
      <description>&lt;p&gt;Some more ways Acronis fails, just for the record:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Completely useless log files. Error messages are crucial in applications. Acronis says ‘Error creating file’. This could mean:&lt;/li&gt;&#xA;&lt;li&gt;I couldn’t resolve the FTP server’s hostname&lt;/li&gt;&#xA;&lt;li&gt;I could resolve the hostname, but could not connect to the FTP port&lt;/li&gt;&#xA;&lt;li&gt;I could resolve the hostname and connect, but I could not authenticate.&lt;/li&gt;&#xA;&lt;li&gt;I could resolve, connect, authenticate, but I could not create a new file.&lt;/li&gt;&#xA;&lt;li&gt;Any number of other things. I could not create a temporary file(Why? No permissions in Acronis’s temporary folder?  No hard drive space? It already exists? The folder that should be the temporary folder doesn’t exist?)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Another error we’ve gotten a few times is ‘Failed to process pair script (some hash).’ While it might be useful to someone, it’s not really any help. A lot of the same stuff applies: Is the file corrupt? What’s wrong with it? Improper syntax? The configuration files are XML, they should be editable as such. Point being: Acronis, get your stuff together and write some real, honest error checking code. It’s boring code to write, but it’s boilerplate stuff, and basic. This is what you hire interns for. Please do so.&#xA;2. The GUI stinks. Everything is wizard based. This in itself isn’t so much of a problem, but it becomes one with their absolute awful support of stuff like, oh, say, remembering passwords. To see how this is an issue: Say I realize that I want maximum encryption on my backup archives. So, I load up the tasks list, click the one I want to change, click the ‘changed settings’ button. It asks me what I want to backup(2-3 screens), then where I want to back it up to. I tell it the FTP site, and it asks me for my login for that site, then allows me to navigate(keep in mind this is already stored in the configuration file I’m trying to edit, in some encrypted form(hopefully, though I would not bet 2bits on it)). Then, it asks me if I want to sign in to the FTP anonymously or use a username and password. Upon selecting non-anonymously, it asks me for the same username and password. Every single time you try to change any part of the configuration.&#xA;3. The command line stinks. There are just a couple of commands, including trueimagecmd and trueimagemnt, but both of them are completely inconsistant on file argument parsing: trueimagemnt uses the more standard UNIX conventions of [-(shortopt)|–(longopt)] (arg) while trueimagecmd uses the completely zany –(longopt):(arg). The command trueimagecmd allows a –verify command, but doesn’t include it in the runtime help or the manual page. None of this seems like too big of a deal, but Acronis is basically the only program that we actual require any GUI at all for on 2 of our 4 main servers. It’d be very nice to have backups and not need a GUI.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Acronis TrueImage</title>
      <link>https://traviscj.com/blog/post/2007-06-30-acronis_trueimage/</link>
      <pubDate>Sat, 30 Jun 2007 14:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2007-06-30-acronis_trueimage/</guid>
      <description>&lt;p&gt;TrueImage is&amp;hellip; well&amp;hellip; Quite the piece of software.&lt;/p&gt;&#xA;&lt;p&gt;What I need it to do: Tell the check_backupdisk script that it&amp;rsquo;s actually running the backup (IE&amp;ndash;don&amp;rsquo;t bitch on nagios) and handle all the mounting/umounting/fscking that it currently does. I think I&amp;rsquo;ll probably end up putting a wrapper script around it&amp;hellip;. but we&amp;rsquo;ll see.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
