Subject: Re: Add SHELL_EXIT_CODE to psql

From: vignesh C <[email-masked]>
Date: Tue, 3 Jan 2023 16:06:13 +0530

On Wed, 21 Dec 2022 at 11:04, Corey Huinker <[email-masked]> wrote:
>
> I've rebased and updated the patch to include documentation.
>
> Regression tests have been moved to a separate patchfile because error messages will vary by OS and configuration, so we probably can't do a stable regression test, but having them handy at least demonstrates the feature.
>
> On Sun, Dec 4, 2022 at 12:35 AM Corey Huinker <[email-masked]> wrote:
>>
>> Rebased. Still waiting on feedback before working on documentation.
>>
>> On Fri, Nov 4, 2022 at 5:23 AM Corey Huinker <[email-masked]> wrote:
>>>
>>> Oops, that sample output was from a previous run, should have been:
>>>
>>> -- SHELL_EXIT_CODE is undefined
>>> \echo :SHELL_EXIT_CODE
>>> :SHELL_EXIT_CODE
>>> -- bad \!
>>> \! borp
>>> sh: line 1: borp: command not found
>>> \echo :SHELL_EXIT_CODE
>>> 127
>>> -- bad backtick
>>> \set var `borp`
>>> sh: line 1: borp: command not found
>>> \echo :SHELL_EXIT_CODE
>>> 127
>>> -- good \!
>>> \! true
>>> \echo :SHELL_EXIT_CODE
>>> 0
>>> -- play with exit codes
>>> \! exit 4
>>> \echo :SHELL_EXIT_CODE
>>> 4
>>> \set var `exit 3`
>>> \echo :SHELL_EXIT_CODE
>>> 3
>>>
>>>
>>> On Fri, Nov 4, 2022 at 5:08 AM Corey Huinker <[email-masked]> wrote:
>>>>
>>>>
>>>> Over in https://www.postgresql.org/message-id/[email-masked] Justin Pryzby suggested that psql might need the ability to capture the shell exit code.
>>>>
>>>> This is a POC patch that does that, but doesn't touch on the ON_ERROR_STOP stuff.
>>>>
>>>> I've added some very rudimentary tests, but haven't touched the documentation, because I strongly suspect that someone will suggest a better name for the variable.
>>>>
>>>> But basically, it works like this
>>>>
>>>> -- SHELL_EXIT_CODE is undefined
>>>> \echo :SHELL_EXIT_CODE
>>>> :SHELL_EXIT_CODE
>>>> -- bad \!
>>>> \! borp
>>>> sh: line 1: borp: command not found
>>>> \echo :SHELL_EXIT_CODE
>>>> 32512
>>>> -- bad backtick
>>>> \set var `borp`
>>>> sh: line 1: borp: command not found
>>>> \echo :SHELL_EXIT_CODE
>>>> 127
>>>> -- good \!
>>>> \! true
>>>> \echo :SHELL_EXIT_CODE
>>>> 0
>>>> -- play with exit codes
>>>> \! exit 4
>>>> \echo :SHELL_EXIT_CODE
>>>> 1024
>>>> \set var `exit 3`
>>>> \echo :SHELL_EXIT_CODE
>>>> 3
>>>>
>>>>
>>>> Feedback welcome.

CFBot shows some compilation errors as in [1], please post an updated
version for the same:
[02:35:49.924] psqlscanslash.l: In function ‘evaluate_backtick’:
[02:35:49.924] psqlscanslash.l:822:11: error: implicit declaration of
function ‘WIFSTOPPED’ [-Werror=implicit-function-declaration]
[02:35:49.924] 822 | exit_code=WSTOPSIG(exit_code);
[02:35:49.924] | ^~~~~~~~~~
[02:35:49.924] psqlscanslash.l:823:14: error: implicit declaration of
function ‘WSTOPSIG’ [-Werror=implicit-function-declaration]
[02:35:49.924] 823 | }
[02:35:49.924] | ^
[02:35:49.924] cc1: all warnings being treated as errors
[02:35:49.925] make[3]: *** [<builtin>: psqlscanslash.o] Error 1

[1] - https://cirrus-ci.com/task/5424476720988160

Regards,
Vignesh