Operating System - HP-UX
1752592 Members
3000 Online
108788 Solutions
New Discussion юеВ

Re: output | read B; echo $B ( now it works now it doesn't )

 
SOLVED
Go to solution
Gilbert Standen_1
Frequent Advisor

output | read B; echo $B ( now it works now it doesn't )

Hi, I often use scripts of the following type, for example:
------
#!/bin/ksh
# Program Notes
echo "set linesize 200 heading off echo off verify off feedback off pagesize 0
select max(sequence#) from v\$log_history;
quit
" | sqlplus -s / as sysdba | sed 's/^[ \t]*//;s/[ \t]*$//' | sed '/^$/d' | read maxseq
echo $maxseq
------
My question is that i find that on some boxes the "read" command will read in the output from pipe into the variable "maxseq" but then when I put this on other boxes, it does not, in other words, sometimes "read" as used above does not work. I don't really understand what is affecting whether or not this will work.

Is there a more reliable alternative for reading the output of the sqlplus call into a variable that is reliably portable across different boxes?

Thanks, Gil
If I could take one thing with me into the next world it would be my valid login to HP ITRC Forums
19 REPLIES 19
James R. Ferguson
Acclaimed Contributor

Re: output | read B; echo $B ( now it works now it doesn't )

Hi Gil:

WHere this works, you are probably running an HP-UX POSIX shell or a Korn (ksh) one. Where this fails, you are probably running the Bash shell.

With the HP-UX Posix or ksh shell, this works:

# echo a b c | read X Y Z
# echo ${X}
a

Under Bash, nothing is printed :-)

Regards!

...JRF...
James R. Ferguson
Acclaimed Contributor

Re: output | read B; echo $B ( now it works now it doesn't )

Hi (gain) Gil:

...and I forgot to add, if it is in Bash environments that you have the problem, then this:

# echo a b c | read X Y Z

...can be rectified with this:

# echo a b c|while read X Y Z;do echo ${X};done
a

Regards!

...JRF...
Gilbert Standen_1
Frequent Advisor

Re: output | read B; echo $B ( now it works now it doesn't )

Thanks for the reply. But still have the same problem although I tried to implement your changes:

echo "set linesize 200 heading off echo off verify off feedback off pagesize 0
select max(sequence#) from v\$log_history;
quit
" | sqlplus -s / as sysdba | sed 's/^[ \t]*//;s/[ \t]*$//' | sed '/^$/d' | while read maxseq; do echo ${maxseq}; done
echo $maxseq
echo ${maxseq}

last two lines output null. The main command does output the current value of the query = "13134" but it is not getting "stored" into "maxseq" and I can't subsequently reference it. Am I doing something incorrectly in the way I implemented your suggested code?
If I could take one thing with me into the next world it would be my valid login to HP ITRC Forums
Tingli
Esteemed Contributor

Re: output | read B; echo $B ( now it works now it doesn't )

Have you got anything before the "sed"?
Gilbert Standen_1
Frequent Advisor

Re: output | read B; echo $B ( now it works now it doesn't )

yes, this:

echo "set linesize 200 heading off echo off verify off feedback off pagesize 0
select max(sequence#) from v\$log_history;
quit
" | sqlplus -s / as sysdba | sed......
If I could take one thing with me into the next world it would be my valid login to HP ITRC Forums
Tingli
Esteemed Contributor

Re: output | read B; echo $B ( now it works now it doesn't )

I mean, just type in:

echo "set linesize 200 heading off echo off verify off feedback off pagesize 0
select max(sequence#) from v\$log_history;
quit
" | sqlplus -s / as sysdba
Gilbert Standen_1
Frequent Advisor

Re: output | read B; echo $B ( now it works now it doesn't )

sorry cannot figure out what point you are making tingli. I need to take the output of that command and read it into a variable. That's the goal. Usually I can do that by just "| read" but as pointed out not all shells support this so I am looking for alternative code to accomplish same. I need to use the value stored to the variable later on in additional scripting.
If I could take one thing with me into the next world it would be my valid login to HP ITRC Forums
Tingli
Esteemed Contributor

Re: output | read B; echo $B ( now it works now it doesn't )

Just want to know whether sqlplus works.
Gilbert Standen_1
Frequent Advisor

Re: output | read B; echo $B ( now it works now it doesn't )

i see - yes it works. everything including the 2 sed expressions works - it outputs the current sequence# in v$log_history. thanks tingli. good thought.
If I could take one thing with me into the next world it would be my valid login to HP ITRC Forums