2 <html lang="en-us" itemscope itemtype="http://schema.org/Article">
5 <meta name="description" content="Rexec Complications Rexec is a Perl module written by me. There are several things that Rexec provides but at it's core it essentially provides an object oriented interface to a remote command line. Rexec attempts to provide functionality by handling...">
6 <meta name="generator" content="Movable Type 5.2.3">
7 <title>Rexec - Status</title>
8 <link rel="alternate" type="application/atom+xml" title="Recent Entries" href="http://defaria.com/blogs/Status/atom.xml">
9 <link rel="canonical" href="http://defaria.com/blogs/Status/2008/02/rexec-2.html">
10 <meta name="viewport" content="width=device-width,initial-scale=1">
11 <link rel="stylesheet" href="http://defaria.com/blogs/Status/styles.css">
13 <link rel="stylesheet" href="http://defaria.com/blogs/Status/styles_ie.css">
14 <script src="/mt/mt-static/support/theme_static/rainier/js/html5shiv.js"></script>
17 <link rel="start" href="http://defaria.com/blogs/Status/">
19 <link rel="prev" href="http://defaria.com/blogs/Status/2008/01/easter-indecisi.html" title="easter: Indecision is the key to flexibility!">
20 <link rel="next" href="http://defaria.com/blogs/Status/2008/02/for-immediate-r-1.html" title="For immediate release">
21 <!-- Open Graph Protocol -->
22 <meta property="og:type" content="article">
23 <meta property="og:locale" content="en-us">
24 <meta property="og:title" content="Rexec">
25 <meta property="og:url" content="http://defaria.com/blogs/Status/2008/02/rexec-2.html">
26 <meta property="og:description" content="Rexec Complications Rexec is a Perl module written by me. There are several things that Rexec provides but at it's core it essentially provides an object oriented interface to a remote command line. Rexec attempts to provide functionality by handling...">
27 <meta property="og:site_name" content="Status">
28 <meta property="og:image" content="/mt/mt-static/support/theme_static/rainier/img/siteicon-sample.png">
30 <meta itemprop="description" content="Rexec Complications Rexec is a Perl module written by me. There are several things that Rexec provides but at it's core it essentially provides an object oriented interface to a remote command line. Rexec attempts to provide functionality by handling...">
31 <link itemprop="url" href="http://defaria.com/blogs/Status/2008/02/rexec-2.html">
32 <link itemprop="image" href="/mt/mt-static/support/theme_static/rainier/img/siteicon-sample.png">
37 <div id="container-inner">
38 <header id="header" role="banner">
39 <div id="header-inner">
40 <div id="header-content">
42 <a href="http://defaria.com/blogs/Status/">
51 <nav role="navigation">
53 <li><a href="http://defaria.com/blogs/Status/">Home</a></li>
62 <div id="content-inner">
63 <ul class="breadcrumb breadcrumb-list">
64 <li class="breadcrumb-list-item"><a href="http://defaria.com/blogs/Status/">Home</a></li>
65 <li class="breadcrumb-list-item">Rexec</li>
67 <div id="individual-main" class="main" role="main">
68 <article id="entry-1943" class="entry entry-asset asset hentry">
69 <div class="asset-header">
70 <h2 itemprop="name" class="asset-name entry-title">Rexec</h2>
71 <footer class="asset-meta">
72 <ul class="asset-meta-list">
73 <li class="asset-meta-list-item">Posted on <time datetime="2008-02-12T14:24:24-08:00" itemprop="datePublished">February 12, 2008</time></li>
74 <li class="asset-meta-list-item">by <span class="author entry-author vcard"></span></li>
77 <li class="asset-meta-list-item">in <a itemprop="articleSection" rel="tag" href="http://defaria.com/blogs/Status/general-dynamics/">General Dynamics</a></li>
83 <div class="entry-content asset-content" itemprop="articleBody">
84 <h2>Rexec Complications</h2>
86 <p>Rexec is a Perl module written by me. There are several things that Rexec provides but at it's core it essentially provides an object oriented interface to a remote command line. Rexec attempts to provide functionality by handling the details in nominal cases however it's basic paradigm is that it expects to be able to execute a command on the remote system, for that command to block and for the command to finish and to properly set the exit status. Rexec accomplishes this by using Expect. When instantiated, Rexec attempts to log into the remote machine using a cascading fallback of ssh, rsh and telnet (unless the caller has explicitly requested a particular protocol). User name and password can be supplied or passwordless login must be configured for Rexec to succeed to connect to the remote system.</p>
88 <p>Thereafter the caller calls the exec method to execute the remote command. Rexec wraps that command with two echo statements that mark the beginning and ending of the command's output as well as the status of the command. Rexec then gathers up the output lines and status, storing them in the object, and returning the output lines as an array (and the status obtainable using the status method). The caller can then proceed accordingly.</p>
90 <p>But the above does assume that commands are of the nature that they block while operating and that they set the exit code properly. No effort is made to do any output redirection, nor are any assumptions made about the command being executed.</p>
92 <p>The first problem arises when the caller has a need to "background" a task. Normally in Unix this means adding a "&" to the end of the line to indicate to put the command in the background. In such a case we run into two problems that the normal shell also has to deal with, that being how to handle asynchronous I/O and how to handle the exit status, which can come at any time. So far no functionality has been added to handle any asynchronous I/O - the answer here is <b>don't do that!!!</b>, at least, for now.</p>
94 <p>Exit status is also not gracefully handled in that it is not attempted to be captured at all.</p>
96 <p>What Rexec does normally is to add an <tt>echo <<i>unique start string</i>></tt> to the front of the command and an <tt>echo <<i>unique end string with status</i>></tt>. Then Rexec scans the output for the start and ending strings and knows that the strings inbetween must have resulted from the output from the command. Rexec also gathers the exit status from the later echo statement. Of course, this assume the command blocks and properly sets the exit status.</p>
98 <p>Now, if Rexec finds a "&" at the end of the command it will treat it as nonblocking. It does not add the start nor the ending echoes and makes no attempt at gathering neither output nor exit status from this command. Another potential problem are commands which do not indicate their desire to be backgrounded (by specifying the trailing "&" character) but background themselves nonetheless.</p>
100 <p>Another, odd problem was also discovered when the remote command ended up doing yet another ssh to another system. Such a command also does not return, or at least not right away. Worse yet, there is a good possibility that that 2nd remote ssh will result in a prompt that will be mistaken for the 1st session's prompt by Rexec! No easy way around this either!</p>
102 <p>Finally, other commands will likewise have a problem when executed remotely. For example: "vi /tmp/foo". But then again, even Expect has problems with this. So we can't be all things to all people but that doesn't mean we cannot be helpful nonetheless.</p>
105 <nav class="page-navigation entry-navigation pagination content-nav">
106 <ul class="page-navigation-list">
108 <li class="page-navigation-list-item page-navigation-prev"><a rel="prev" href="http://defaria.com/blogs/Status/2008/01/easter-indecisi.html" title="easter: Indecision is the key to flexibility!">Previous entry</a></li>
111 <li class="page-navigation-list-item page-navigation-next"><a rel="next" href="http://defaria.com/blogs/Status/2008/02/for-immediate-r-1.html" title="For immediate release">Next entry</a></li>
116 <aside id="zenback" class="zenback feedback">
117 Please paste Zenback script code here.
124 <aside class="widgets related" role="complementary">
125 <nav class="widget-search widget">
126 <div class="widget-content">
127 <form method="get" id="search" action="http://defaria.com/mt/mt-search.cgi">
129 <input type="text" name="search" value="" placeholder="Search...">
131 <input type="hidden" name="IncludeBlogs" value="8">
133 <input type="hidden" name="limit" value="20">
134 <button type="submit" name="button">
135 <img alt="Search" src="/mt/mt-static/support/theme_static/rainier/img/search-icon.png">
141 <nav class="widget-archive-category widget">
142 <h3 class="widget-header">Categories</h3>
143 <div class="widget-content">
146 <ul class="widget-list">
149 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/ameriquest/">Ameriquest (99)</a>
157 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/audience/">Audience (3)</a>
165 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/broadcom/">Broadcom (76)</a>
173 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/gpdb/">GPDB (35)</a>
181 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/general-dynamics/">General Dynamics (61)</a>
189 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/general-electric/">General Electric (13)</a>
197 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/hewlett-packard/">Hewlett Packard (13)</a>
205 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/lynuxworks/">LynuxWorks (162)</a>
213 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/pqa/">PQA (35)</a>
221 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/salira/">Salira (79)</a>
229 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/tellabs/">Tellabs (2)</a>
237 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/texas-instruments/">Texas Instruments (31)</a>
249 <nav class="widget-archive-dropdown widget">
250 <h3 class="widget-header">Archives</h3>
251 <div class="widget-content">
253 <option>Select a Month...</option>
255 <option value="http://defaria.com/blogs/Status/2016/02/">February 2016</option>
259 <option value="http://defaria.com/blogs/Status/2014/09/">September 2014</option>
263 <option value="http://defaria.com/blogs/Status/2014/04/">April 2014</option>
267 <option value="http://defaria.com/blogs/Status/2014/03/">March 2014</option>
271 <option value="http://defaria.com/blogs/Status/2013/02/">February 2013</option>
275 <option value="http://defaria.com/blogs/Status/2012/09/">September 2012</option>
279 <option value="http://defaria.com/blogs/Status/2012/08/">August 2012</option>
283 <option value="http://defaria.com/blogs/Status/2012/05/">May 2012</option>
287 <option value="http://defaria.com/blogs/Status/2012/04/">April 2012</option>
291 <option value="http://defaria.com/blogs/Status/2012/02/">February 2012</option>
295 <option value="http://defaria.com/blogs/Status/2012/01/">January 2012</option>
299 <option value="http://defaria.com/blogs/Status/2011/10/">October 2011</option>
303 <option value="http://defaria.com/blogs/Status/2011/07/">July 2011</option>
307 <option value="http://defaria.com/blogs/Status/2010/09/">September 2010</option>
311 <option value="http://defaria.com/blogs/Status/2010/08/">August 2010</option>
315 <option value="http://defaria.com/blogs/Status/2010/04/">April 2010</option>
319 <option value="http://defaria.com/blogs/Status/2010/03/">March 2010</option>
323 <option value="http://defaria.com/blogs/Status/2010/02/">February 2010</option>
327 <option value="http://defaria.com/blogs/Status/2009/05/">May 2009</option>
331 <option value="http://defaria.com/blogs/Status/2009/04/">April 2009</option>
335 <option value="http://defaria.com/blogs/Status/2008/07/">July 2008</option>
339 <option value="http://defaria.com/blogs/Status/2008/05/">May 2008</option>
343 <option value="http://defaria.com/blogs/Status/2008/04/">April 2008</option>
347 <option value="http://defaria.com/blogs/Status/2008/03/">March 2008</option>
351 <option value="http://defaria.com/blogs/Status/2008/02/">February 2008</option>
355 <option value="http://defaria.com/blogs/Status/2008/01/">January 2008</option>
359 <option value="http://defaria.com/blogs/Status/2007/12/">December 2007</option>
363 <option value="http://defaria.com/blogs/Status/2007/11/">November 2007</option>
367 <option value="http://defaria.com/blogs/Status/2007/10/">October 2007</option>
371 <option value="http://defaria.com/blogs/Status/2007/09/">September 2007</option>
375 <option value="http://defaria.com/blogs/Status/2007/08/">August 2007</option>
379 <option value="http://defaria.com/blogs/Status/2007/07/">July 2007</option>
383 <option value="http://defaria.com/blogs/Status/2007/06/">June 2007</option>
387 <option value="http://defaria.com/blogs/Status/2007/05/">May 2007</option>
391 <option value="http://defaria.com/blogs/Status/2007/04/">April 2007</option>
395 <option value="http://defaria.com/blogs/Status/2007/03/">March 2007</option>
399 <option value="http://defaria.com/blogs/Status/2007/01/">January 2007</option>
403 <option value="http://defaria.com/blogs/Status/2006/12/">December 2006</option>
407 <option value="http://defaria.com/blogs/Status/2006/11/">November 2006</option>
411 <option value="http://defaria.com/blogs/Status/2006/10/">October 2006</option>
415 <option value="http://defaria.com/blogs/Status/2006/09/">September 2006</option>
419 <option value="http://defaria.com/blogs/Status/2006/07/">July 2006</option>
423 <option value="http://defaria.com/blogs/Status/2006/06/">June 2006</option>
427 <option value="http://defaria.com/blogs/Status/2006/05/">May 2006</option>
431 <option value="http://defaria.com/blogs/Status/2006/04/">April 2006</option>
435 <option value="http://defaria.com/blogs/Status/2006/03/">March 2006</option>
439 <option value="http://defaria.com/blogs/Status/2006/02/">February 2006</option>
443 <option value="http://defaria.com/blogs/Status/2006/01/">January 2006</option>
447 <option value="http://defaria.com/blogs/Status/2005/12/">December 2005</option>
451 <option value="http://defaria.com/blogs/Status/2005/11/">November 2005</option>
455 <option value="http://defaria.com/blogs/Status/2005/10/">October 2005</option>
459 <option value="http://defaria.com/blogs/Status/2005/09/">September 2005</option>
463 <option value="http://defaria.com/blogs/Status/2005/08/">August 2005</option>
467 <option value="http://defaria.com/blogs/Status/2005/07/">July 2005</option>
471 <option value="http://defaria.com/blogs/Status/2005/06/">June 2005</option>
475 <option value="http://defaria.com/blogs/Status/2005/05/">May 2005</option>
479 <option value="http://defaria.com/blogs/Status/2005/04/">April 2005</option>
483 <option value="http://defaria.com/blogs/Status/2005/03/">March 2005</option>
487 <option value="http://defaria.com/blogs/Status/2005/02/">February 2005</option>
491 <option value="http://defaria.com/blogs/Status/2005/01/">January 2005</option>
495 <option value="http://defaria.com/blogs/Status/2004/12/">December 2004</option>
499 <option value="http://defaria.com/blogs/Status/2004/09/">September 2004</option>
503 <option value="http://defaria.com/blogs/Status/2004/08/">August 2004</option>
507 <option value="http://defaria.com/blogs/Status/2004/07/">July 2004</option>
511 <option value="http://defaria.com/blogs/Status/2004/06/">June 2004</option>
515 <option value="http://defaria.com/blogs/Status/2004/05/">May 2004</option>
519 <option value="http://defaria.com/blogs/Status/2004/04/">April 2004</option>
523 <option value="http://defaria.com/blogs/Status/2004/03/">March 2004</option>
527 <option value="http://defaria.com/blogs/Status/2004/02/">February 2004</option>
531 <option value="http://defaria.com/blogs/Status/2004/01/">January 2004</option>
535 <option value="http://defaria.com/blogs/Status/2003/12/">December 2003</option>
539 <option value="http://defaria.com/blogs/Status/2003/11/">November 2003</option>
547 <div class="widget-syndication widget section">
548 <div class="widget-content">
549 <p><img src="http://defaria.com/mt/mt-static/images/status_icons/feed.gif" alt="Subscribe to feed" width="9" height="9" /> <a href="http://defaria.com/blogs/Status/atom.xml">Subscribe to this blog's feed</a></p>
557 <footer id="footer" role="contentinfo">
558 <div id="footer-inner">
559 <div id="footer-content">
560 <nav role="navigation">
562 <li><a href="http://defaria.com/blogs/Status/">Home</a></li>
568 <p class="license">© Copyright 2016.</p>
569 <p class="poweredby">Powered by <a href="http://www.movabletype.org/">Movable Type</a></p>
575 <script src="http://defaria.com/mt/mt-static/jquery/jquery.min.js"></script>
576 <script src="http://defaria.com/blogs/Status/mt-theme-scale2.js"></script>