Hi Wen Chin and Ansley,
First of all, there is a confusion about the "piping issue".
Yes, there is a problem when Ferret reads commands, because
it can't read long lines from the standard input. If your
script contain long lines, you have to use a script as
ferret -script yourscriptfile.jnl
instead of
ferret< yourscriptfile.jnl
or of
ferret<<EOF
. . . contents of your script . . .
EOF
On the other hand, there is no such problem in outputs from Ferret.
My solution simply processes outputs from Ferret. I mentioned
the input piping issue just as a caveat because your original script
used the pipe "<<EOF".
| 2)For Ryo, strangely I couldn't find your reply. I found your reply
| embedded in Ansley's reply.
Your mailserver bounced my message because it thought my message
contained an unsafe attachment. I just attached a shell script.
Well, a shell script IS an executable in a sense and could delete
all your files, set up a trojan horse, or something like that, yes.
So, I don't blame your mailserver :-)
This time, I'm just copying and pasting my original message
and the script below.
| In addition, when you mentioned
| "command_to_process_ferrets_output", could you give me an example?
| I assume the demonstration is
| an example written inside a shell script right?
Yes. The "command" reads text lines and do whatever
you like with them. And yes, you can define a "command"
within a shell script as well as call another script
if you prefer doing so. What I don't know is how to
define a command in the C-Shell language.
Regards,
Ryo
----------------------------------------------------------
Hi,
| I do not know how to save the value
| of a variable in ferret script and pass that value to another
| variable in my c shell file.
Does anybody know how to suppress messages from Ferret other than
using the -script flag? Without the "-script" flag, we have
startup messages like
NOAA/PMEL TMAP
FERRET v6.61
. . .
and "yes?" prompts.
For now, I use the "-script" flag, which complicates my solution
shown below.
In principle, you can "print" the value using the SAY
command of Ferret and capture it from your shell script.
It's the standard way of communication between processes
within a shell script.
I'm attaching a small demonstration. I use the Bourne Shell
because I don't know the C Shell well enough.
The basic idea is
ferret<<STOP | command_to_process_ferrets_output
let a = 3.14
say `a`
quit
STOP
where you read lines from Ferret in
command_to_process_ferrets_output .
But, if you do this, you end up seeing extra information printed
out by Ferret as I mentioned above. So, in my demonstration,
I use the "-script" flag and a named pipe for the script.
Since it's a demonstration, I omitted error handling.
As an aside, a named pipe is necessary when your lines are long.
As far as I know, the maximum length of a line is a lot smaller
when reading the standard input than when reading a script file.
Regards,
Ryo
-----------------------
#/bin/sh
# This is just a demonstration or a template.
process_ferrets_output()
{
while read line; do
echo ferret said "$line"
done
}
mypipe=tmp-pipe.jnl
mkfifo $mypipe
sleep 999999999> $mypipe& ## keeps the pipe from closing.
sleep_pid=$!
ferret -noverify -script $mypipe | process_ferrets_output&
cat<<'EOF'> $mypipe
let a = 3.14
let b = "hello"
say `a`
say `b`
quit
EOF
kill $sleep_pid
rm $mypipe
wait