FW: Behaviours of Terminal Versus Script when using "<<"

Buchbinder, Barry (NIH/NIAID) [E] BBuchbinder@niaid.nih.gov
Wed Sep 15 21:47:00 GMT 2010


delbydev sent the following at Wednesday, September 15, 2010 1:18 PM
>
>Hello Have hunted all over for this one but it seems no one else has
>reported the issue - maybe because they don't use the feature or there
>is something awry with my installation
>
>I write scripts that dart in and out of databases
>
>I bind my Oracle connection string into a number of variables in my
>.profile
>
>ORACLE_HOME='c:\\Oracle\\product\\11.2.0\\dbhome_2' export ORACLE_HOME
>mydbconn="${ORACLE_HOME}\\bin\\sqlplus -s mydbuser/mydbpass@mydbhost"
>export mydbconn
>
>so when I want to dart into the database - I perform the following from
>the terminal command line ${mydbconn} SQL> SQL> exit
>
>If I have a query I run frequently - I will do something like this
>
>${mydbconn} << FINGather alter session set nls_date_format = 'yyyy-mm-dd
>hh24:mi:ss'; select sysdate from dual; FINGather
>
>The << delimiter instructs the terminal to pass all commands between the
>FINGather Labels to the program request (sort of piping but not)
>
>This is great and dandy - and works if I type this into the cygwin
>terminal manually (or paste, which ever)
>
>When I try this from a script I hit issues. I usually want to catch
>the results from the DB query to a file so - let's call my script
>mydbtime.sh
>
>The contents of which are as following
>
>#!/bin/bash echo My DB Time Fetcher > /tmp/myresults.txt date >>
>/tmp/myresults.txt ${mydbconn} << FINGather >> /tmp/myresults.txt alter
>session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss'; select sysdate
>from dual; FINGather
>
>After editing chmod 755 mydbtime.sh To run as standard ./mydbtime
>
>There is a gotcha some where because I know definitely this line is
>working when inside a script
>
>The contents of the /tmp/myresults.txt output always shows the results
>of the echo command and the date command - but never the results of the
>${mydbconn}
>
>${mydbconn} << FINGather >> /tmp/myresults.txt
>
>_____________ If I remove the date and echo commands out :
>
>#!/bin/bash ${mydbconn} << FINGather > /tmp/myresults.txt alter session
>set nls_date_format = 'yyyy-mm-dd hh24:mi:ss'; select sysdate from dual;
>FINGather
>
>the date stamp and contents of the /tmp/myresults.txt are always
>refreshed - just with no results so I know that "${mydbconn} <<
>FINGather > /tmp/myresults.txt" is processing but the results from
>dbserver are not being passed back - in fact - I don't think it is
>connecting to DB at all because even a long query completes immediately.
>
>Presently - to run my scripts I perform the following process
>
>cat mydbtime.sh
>
>Copy and Paste the full contents straight onto the Terminal Command line
>This works perfectly
>
>Does anyone have issues with this?
>
>I have found a workaround that works perfectly - using the supplied
>minnty terminal - but was hoping not to build too many dependencies on
>the cygwin "windows" - I will work with minnty - but does anyone know if
>this is shipped as standard - because it is not the first shortcut in
>the Cygwin folder - had I found this before I would have been singing
>from the roof tops at the joy of being able to move away from the MS
>Windows CMD terminal - will support for CMD terminal be dropped or have
>I landed on a well kept secret
>
>so two questions 1) Does the MS CMD Terminal support << in scripts
>(presently not in my installation) - I can't be sure but I think it used
>to work on older environment 2) Is minnty a default standard terminal
>that will ship with all future builds of cygwin?
>
>Environment Details Windows 7
>
>Great job guys - love this product - Command Shell is trying to catch up
>- think they have a long way to go
>
>Cheers
>
>Delbydev

I use Oracle's plus80.exe on XP in a cygwin/dash script.

Although I do not use <<, I feed commands to plus80.exe directly by piping
into it or putting commands into a file and use "plus80 @file".  In both
cases, I convert to DOS line endings beforehand with "u2d -D".

So I'd play with your line endings and see whether that helps.  You are
probably giving it a simple \n while sqlplus.exe is looking for \r and/or
\r\n.

Good luck.

- Barry
  Disclaimer: Statements made herein are not made on behalf of NIAID.


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple



More information about the Cygwin mailing list