Site Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

commands:exec [2010-01-26 16:38] (current)
asciiphil created
Line 1: Line 1:
 +====== exec ======
 +
 +===== Default Keybindings =====
 +
 +None.
 +
 +===== Syntax =====
 +
 +  * ''**exec** %%[[%%//fdpat//] //newcommand// [//args// //...//]]''
 +
 +===== Description =====
 +
 +Run a unix subprocess (specified by an executable path //newcommand// and
 +its optional arguments) in the current window.  The flow of data between
 +//newcommand//'s stdin/stdout/stderr, the process originally started in
 +the window (let us call it "application-process") and ''screen'' itself
 +(window) is controlled by the file descriptor pattern //fdpat// This
 +pattern is basically a three character sequence representing stdin, stdout
 +and stderr of newcommand.  A dot (''.'' connects the file descriptor to
 +''screen'' An exclamation mark (''!'') causes the file descriptor to be
 +connected to the application-process.  A colon ('':'' combines both.
 +User input will go to //newcommand// unless //newcommand// receives the
 +application-process' output (//fdpat//'s first character is ''!'' or
 +'':'') or a pipe symbol (''|'') is added (as a fourth character) to the
 +end of //fdpat//.
 +
 +Invoking ''exec'' without arguments shows name and arguments of the
 +currently running subprocess in this window.  Only one subprocess a time
 +can be running in each window.  When a subprocess is running the
 +''[[kill]]'' command will affect it instead of the window's process.
 +
 +Refer to the postscript file {{:commands:fdpat.ps}} for a confusing illustration
 +of all 21 possible combinations.  Each drawing shows the digits 2,1,0
 +representing the three file descriptors of newcommand.  The box marked "W"
 +is the usual pty that has the application-process on its slave side.  The
 +box marked "P" is the secondary pty that now has ''screen'' at its master
 +side.
 +
 +=== Abbreviations ===
 +
 +Whitespace between the word ''exec'' and //fdpat// and the command can be
 +omitted.  Trailing dots and a //fdpat// consisting only of dots can be
 +omitted.  A simple "''|''" is synonymous for the pattern "''!..|''"; the
 +word ''exec'' can be omitted here and can always be replaced by "''!''".
 +
 +===== Examples =====
 +
 +<code>
 +exec ... /bin/sh
 +exec /bin/sh
 +!/bin/sh
 +</code>
 +
 +Creates another shell in the same window, while the original shell is
 +still running.  Output of both shells is displayed and user input is sent
 +to the new ''/bin/sh''.
 +
 +<code>
 +exec !.. stty 19200
 +exec ! stty 19200
 +!!stty 19200
 +</code>
 +
 +Set the speed of the window's tty.  If your ''stty'' command operates on
 +stdout, then add another "''!''".
 +
 +<code>
 +exec !..| less
 +|less
 +</code>
 +
 +This adds a pager to the window output.  The special character ''|'' is
 +needed to give the user control over the pager although it gets its input
 +from the window's process.  This works, because ''less'' listens on stderr
 +(a behavior that ''screen'' would not expect without the ''|'') when its
 +stdin is not a tty.  Less versions newer than 177 fail miserably here;
 +good old ''pg'' still works.
 +
 +<code>
 +!:sed -n s/.*Error.*/\007/p
 +</code>
 +
 +Sends window output to both the user and the ''sed'' command.  The ''sed''
 +inserts an additional bell character (oct.  007) to the window output seen
 +by ''screen'' This will cause "Bell in window //x//" messages, whenever
 +the string "Error" appears in the window.
 +
 +===== See Also =====
 +
 +  * [[:Misc]]
  

User Tools