Skip to Main Content

is _RC trustworthy?

berxAug 5 2020 — edited Aug 14 2020

In SQLcl Version 20.2.0.174.1557
on Oracle Linux Server release 8.2
I want to utilize _RC variable to get the result (exit) code of the command executed with HOST.

A simple test with ls in the shell shows the expected value:

[oracle@localhost ~]$ ls /xxx

ls: cannot access '/xxx': No such file or directory

[oracle@localhost ~]$ echo $?

2

But when run in SQLcl the variable _RC is not updated:

SQL> !ls /xxx

ls: cannot access '/xxx': No such file or directory

SQL> define

DEFINE _DATE =  "05-AUG-20" (CHAR)

DEFINE _CONNECT_IDENTIFIER =  "CDB$ROOT" (CHAR)

DEFINE _USER =  "SYS" (CHAR)

DEFINE _PRIVILEGE =  "AS SYSDBA" (CHAR)

DEFINE _SQLPLUS_RELEASE =  "2002000000" (CHAR)

DEFINE _EDITOR =  "vi" (CHAR)

DEFINE _O_VERSION =  "Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.8.0.0.0" (CHAR)

DEFINE _O_RELEASE =  "1908000000" (CHAR)

DEFINE _PWD =  "/home/oracle" (CHAR)

DEFINE _RC =  0 (NUMBER)

interestingly, the way SQLcl executes commands is quite equipped to use the exit code:

found with ps -ef | grep 70531:

oracle     72108   70531  0 08:44 pts/0    00:00:00 bash -c SQLCLTERM=`stty -g 2>/dev/null` ; stty sane 2>/dev/null;  export PATH="/home/oracle:$PATH" && ps -ef | grep 70531; SQLCLEXIT=$? ; if test "M$SQLCLTERM" != "M" ; then stty "$SQLCLTERM" 2>/dev/null ; fi; exit $SQLCLEXIT

you can see, it uses the variable SQLCLEXIT - but somewhere it's content get lost. ble

Does anyone if/how I can get reliable results from HOST command into SQLcls variables?

Comments
Post Details
Added on Aug 5 2020
3 comments
88 views