comp-mail-mush@srhqla.uucp (06/14/89)
From: "Barton E. Schaefer" <island!ucbcad!cse.ogc.edu!schaefer> How many times have you wished you could do something like this in mush? mush> set date = `date` mush> echo $date Mon Jun 12 13:20:15 PDT 1989 Well, here's a simply apalling hack to (almost) allow you to do that. Before I tell you how to set this up, let me give a quick example of how it is used, and say something about its limitations. I call this "bq" for `b'ack`q'uote, because it simulates the backquote mechanism of sh/csh (in fact, it USES the backquote mechanism of sh). The syntax is bq variable unix-command where "variable" is the name of the variable you want to set, and "unix-command" is the command you want to run. If "unix-command" involves any pipes, be sure to escape each `|' character with a backslash. So, to do the simple example with "date" above, you would type: bq date date which sets $date to the current date. A more useful example: bq known_hosts uuname sets $known_hosts to all of your system's uucp neighbors. Now, about the limitations. The most obvious one is that all newlines generated by the "unix-command" get changed into spaces. A less obvious but possibly more annoying one is that the multiple levels of shell interpretation make it very hard to get spaces or either kind of quote mark into the arguments of the command. You just sort of have to play with it and see what happens. Also, there is NO WAY to get a single (') quote mark into the variable, regardless of what goes into the arguments. Another annoying one is that mush can't use cmd aliases in the .mushrc file, so you can't use bq in this way from there -- but I'll tell you how to get around that one. Finally, mush can only handle about 1000 characters of output from the command, so be careful. Oh, yeah, and even if "unix-command" fails, "variable" will be set to the empty string. So how do you set this up? First, add to your .mushrc file the line: cmd bq 'sh bq \!* ; source ~/.mushbq' If you have the variable $unix set, you can omit the "sh", but I recommend leaving it anyway. It should be obvious from this how you have to use bq to set things in .mushrc -- you type out the whole thing: # Get the known_hosts automatically sh bq known_hosts uuname source ~/.mushbq Once you have .mushrc all arranged, unpack this archive and put the "bq" script in a directory accessible from your $PATH. If your OS doesn't understand the #! convention, change the first line to a `:'. # This is a shell archive. Remove anything before this line, # then unpack it by saving it in a file and typing "sh file". # # Wrapped by ogccse!schaefer on Mon Jun 12 13:23:04 PDT 1989 # Contents: bq echo x - bq sed 's/^@//' > "bq" <<'@//E*O*F bq//' #!/bin/sh if [ $# -lt 2 ] then echo bq: too few arguments echo 'usage: bq variable command [args ...]' fi 1>&2 out=$HOME/.mushbq var=$1 shift val=`eval "$@" | tr "\012'" ' "'` echo set $var = "'$val'" > $out @//E*O*F bq// chmod u=rwx,g=rx,o=rx bq exit 0 # End of shell archive That's all there is to it. Have fun .... BTW, the much-delayed patch #4 will be coming out as soon as Dan and I resolve some last-minute details. -- Bart Schaefer "And if you believe that, you'll believe anything." -- DangerMouse CSNET / Internet schaefer@cse.ogc.edu UUCP ...{sequent,tektronix,verdix}!ogccse!schaefer