Hi Zvi,
The 'read' command isn't skipped, but when you invoke something via
QSH CMD('command-here') the session isn't considered an interactive
session. STDIN is left closed, so when the 'read' utility tries to read
from stdin, it gets an error, and the 'read' utility ends with a nonzero
exit status.
For example, consider this trivial script:
printf "enter something:\n"
read X || X="error"
printf "I just read: %s\n" "$X"
If I run this script interactive, I get this:
> QSH
$ ./myscript.sh
enter something:
blah blah
I just read: blah blah
If I run it with the 'cmd' parameter, I get this:
> QSH CMD('./myscript.sh')
enter something:
I just read: error
So the 'read' utility is still running... but it's getting an error
because STDIN isn't open. IBM's assumption is that if you use QSH
CMD(xyz) you are running a command from a CL program, and don't actually
want to start an interactive QShell session. So they don't allow
scripts/programs/etc to read from the display.
If you _do_ want to have an interactive session where the user can
interact with your script, try this:
PGM
ADDENVVAR ENVVAR(QIBM_QSH_INTERACTIVE_CMD) +
VALUE('myscript.sh; exit') +
REPLACE(*YES)
QSH
RMVENVVAR ENVVAR(QIBM_QSH_INTERACTIVE_CMD)
ENDPGM
In this case, it'll invoke QSH interactively, but it'll immediately run
the interactive command specified in the QIBM_QSH_INTERACTIVE_CMD
variable (which in this case consists of running your script, and then
exiting QShell)
Removing the envvar is a good idea -- otherwise the next time someone
runs QSH/STRQSH in the same job, the same command will run :)
On 12/28/2010 9:22 AM, Zvi Kave wrote:
I am trying to get a variable from QSH script script.sh by command:
read varname
The "read varname" command line is in the script script.sh.
If I call the script by
QSH CMD('script.sh')
then the read command is skipped, and it does not wait for input from screen.
How can I fix it ?
Regards,
Zvi
As an Amazon Associate we earn from qualifying purchases.