🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.mail.mush
Article #517

Re: Problem setting headers to output from shell commands

#517
From: Barton E. Schaefer
Date: Fri, 21 Sep 1990 17:41
63 lines
2708 bytes
In article <1990Sep21.091000.11589@ibmpcug.co.uk> dylan@ibmpcug.co.uk (Matthew Farwell) writes:
} Ok. This may seem a silly question, but I have RTFM'd, and I can't see
} an easy + simplistic answer.
}
} I want to include the output from a shell command in a header.

That's because mush doesn't support a text-substitution `command` mechanism.
Backquoted commands substitute message lists, just as "pipes" in mush pass
message lists rather than text.

} Say I wanted to produce a header like
} 
} my_hdr X-My-Date: `sh date`
} 
} How would I go about it?

That one is fairly easy, actually:

cmd sh_hdr "sh 'echo my_hdr \!:1 ` \!:2-$ ` > $tmpdir/h$$'; source $tmpdir/h$$"

this of course assumes you have set tmpdir somewhere, use /tmp if not.
You can fool with the quoting to get $tmpdir expanded at execute time
rather than at cmd-definition time if you want.  Usage example:

sh_hdr X-My-Date: date

The major drawback of this is that you can't use it in a .mushrc file
(because the \! positional references are not recognized when sourcing
a file, to avoid complaints about alias addresses having ! characters).
In the .mushrc, you'll have to perform the expansion yourself, e.g.

# Generate an extra date header
if is_sending
    sh "echo my_hdr X-My-Date: `date` > $tmpdir/h$$"; source $tmpdir/h$$
endif

Rich Burridge, are you reading this?  Why didn't I think of this when
you were trying to integrate mush with faces?  Oh, well ....

} p.s. `date` is only used as an example. I want a generic way of doing things.

The above is as close to generic as it gets at the moment.  I posted a
mush script called "bq" (for backquote) a while ago which does this in
a slightly more generalized manner, but I don't have a copy handy.  You
could also try:

cmd bq "sh 'echo \!* > $tmpdir/bq$$'; source $tmpdir/bq$$"

which would be used like

bq my_hdr X-My-Date: `date`
bq set hostname=`hostname`

However, that would only work for very simple commands because of quoting
problems.  For example,

bq set date=`date`

would not work; using my current date as an example, it would set date
to "Fri", and create variables named "Sep", "21", "10:35:26", "PDT", and
"1990", which is clearly not what you want. ;-}
-- 
Bart Schaefer						schaefer@cse.ogi.edu
Technical Details
Message-ID: <12320@ogicse.ogi.edu>
Path: arc1-ca.pugleaf.net!utzoo!attcan!uunet!ogicse!schaefer
References: <1990Sep21.091000.11589@ibmpcug.co.uk>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!attcan!uunet!ogicse!schaefer
From: schaefer@ogicse.ogi.edu (Barton E. Schaefer)
Newsgroups: comp.mail.mush
Subject: Re: Problem setting headers to output from shell commands
Message-ID: <12320@ogicse.ogi.edu>
Date: 21 Sep 90 17:41:11 GMT
References: <1990Sep21.091000.11589@ibmpcug.co.uk>
Organization: Oregon Graduate Institute (formerly OGC), Beaverton, OR
Lines: 63