From mboxrd@z Thu Jan 1 00:00:00 1970 From: Subhan Michael Tindall Subject: Re: Executing org shell blocks on remote machine over ssh Date: Tue, 18 Nov 2014 19:52:44 +0000 Message-ID: <1a54994624304b4c8518bddbfce72380@fbmailsvr1.familycareinc.org> References: <874mtxx18q.fsf@duke.edu> <87ioic8j1u.fsf@duke.edu> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:47010) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XqopY-0003lx-B7 for emacs-orgmode@gnu.org; Tue, 18 Nov 2014 14:52:56 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XqopU-0000j8-83 for emacs-orgmode@gnu.org; Tue, 18 Nov 2014 14:52:52 -0500 Received: from outbound.familycareinc.org ([207.170.205.147]:50782) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XqopT-0000ix-Tf for emacs-orgmode@gnu.org; Tue, 18 Nov 2014 14:52:48 -0500 In-Reply-To: <87ioic8j1u.fsf@duke.edu> Content-Language: en-US List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: David Bjergaard , Ista Zahn Cc: Brett Viren , emacs-orgmode Mailinglist > -----Original Message----- > From: emacs-orgmode-bounces+subhant=3Dfamilycareinc.org@gnu.org > [mailto:emacs-orgmode-bounces+subhant=3Dfamilycareinc.org@gnu.org] On > Behalf Of David Bjergaard > Sent: Tuesday, November 18, 2014 10:23 AM > To: Ista Zahn > Cc: Brett Viren; emacs-orgmode Mailinglist > Subject: Re: [O] Executing org shell blocks on remote machine over ssh > = > Ista Zahn writes: > = > > On Tue, Nov 18, 2014 at 10:43 AM, Brett Viren wrote: > >> David Bjergaard writes: > >> > >>> I use org mode as a lab notebook. I write org-src blocks to keep > >>> track of tasks I do at the command line, and then I copy paste them > >>> into the terminal. I would really like to hit "C-c C-c" on the > >>> source block and have it executed on the remote machine. I know > >>> that you can specify the remote machine according to [1], however > >>> the software I use requires a fairly complicated setup to get going. > >> > >> Is it just complicated, or is it also prohibitively long-running? > >> > >> If just the former, you could maybe bundle the setup into some shell > >> script and source it in each of your sh source blocks. Eg: > >> > >> #+BEGIN_SRC sh :results output :dir /ssh:lycastus:/home/bviren > >> /bin/pwd > >> echo $HOSTNAME > >> ls -l foo.sh > >> echo "---" > >> cat foo.sh > >> echo "---" > >> source ./foo.sh > >> echo $FOO > >> #+END_SRC > >> > >> #+RESULTS: > >> : /home/bviren > >> : lycastus > >> : -rw-rw-r-- 1 bviren bviren 16 Nov 18 10:27 foo.sh > >> : --- > >> : export FOO=3Dbar > >> : > >> : --- > >> : bar > >> > >> > >> > >> If the setup is purely environmental, and it takes a long time to > >> perform, maybe you could do the set up once and then cache the > >> resulting environment using the output of "env". > > > > I guess I'm missing something (like why the OP want's to run a shell > > in a separate window), but why not just > > > > #+BEGIN_SRC sh :results output :dir /ssh:lycastus:/home/bviren :session > *shell* > > /bin/pwd > > echo $HOSTNAME > > ls -l foo.sh > > echo "---" > > cat foo.sh > > echo "---" > > source ./foo.sh > > echo $FOO > > #+END_SRC > > > > ? > > > > Best, > > Ista > >> > >> > >> -Brett. > Hi Ista, Brett, > = > Thanks for the hints, I'll try these. > Some clarification: > >> If the setup is purely environmental, and it takes a long time to > >> perform, maybe you could do the set up once and then cache the > >> resulting environment using the output of "env". > Unfortunately it takes a long time to set up, and its complicated (I have= to > initialize different versions of the software depending on which project = I'm > working on.) It can take up to 10 seconds to restore a saved environment, > and it takes some setting up bootstrap the restoration command. > > I guess I'm missing something (like why the OP want's to run a shell > > in a separate window), but why not just > I want the separate window because once the environment is set up, I also > jump around a lot. I record the pieces of shell script that are importan= t for > reproducing results in the notebook. The snippets are then recycled acro= ss > many sessions, and different pieces are used at different times (some are > even used with different pieces of software). > = > What I would like is to log into the remote machine, set up the software,= and > then have a way to tell emacs to send the org-src block to the set up > environment so that I can build up the parts I need at that moment. > = > I know this is working "against the grain" of the literate programming > paradigm where the document and the source code are coupled, and > tangling the document produces a program that can be executed. I'm just > wondering if its possible. If not that's fine. Really I'm just trying t= o save > myself a copy-paste (and the associated issues with it getting recorded i= n my > .bash_history). > = > Cheers, > = > Dave It's been quite a while since I used one (or even did much shell programmin= g), so my details are a bit fuzzy. But, I think your solution is in Unix (I= 'm assuming that's what your using), not emacs itself. Take a look at the concept of 'named pipes' If you've got a shared file system or can remote mount, a process like this= would probably work: Create 2 named pipes One you can write to on system A (eg. my_sys_a_pipe), with a small script o= n system B that reads my_sys_a_pipe and executes the commands it grabs Second named pipe is created and stdout on system B is redirected to it, th= en system A listens to it & feeds what is received to stdout (my_sys_b_pipe) Echo "my list of commands" > my_sys_a_pipe echo < my_sys_b_pipe (see below, probably want a loop here) You probably also need to include a tag of some sort (echo "sys_b_done" or = similar) as the last command and then run a read/echo loop on my_sys_b_pipe= to terminate the driver script and make sure it returns to emacs. Hopefully this isn't too confusing, unfortunately I don't have time to go b= ack and look up my syntax, but I think conceptually it might get you down t= he road This message is intended for the sole use of the individual and entity to w= hich it is addressed and may contain information that is privileged, confid= ential and exempt from disclosure under applicable law. If you are not the = intended addressee, nor authorized to receive for the intended addressee, y= ou are hereby notified that you may not use, copy, disclose or distribute t= o anyone the message or any information contained in the message. If you ha= ve received this message in error, please immediately advise the sender by = reply email and delete the message. Thank you.