[R] recovering "status" after q(status=n) in Windows
Prof Brian Ripley
ripley at stats.ox.ac.uk
Tue Nov 27 08:30:59 CET 2007
On Mon, 26 Nov 2007, Dennis Fisher wrote:
> Colleagues,
>
> I am writing scripts that run on both Windows (Vista) and Linux
> (RedHat 9). The scripts will be used in both S-Plus (version 8) and
> R (2.6.0). I am trying to use the "status" portion of the quit command:
> ------------------------------------------------------------------------
> -----------------------------------------------------------------------
>> quit package:base R Documentation
>>
>> Terminate an R Session
>>
>> Description:
>>
>> The function 'quit' or its alias 'q' terminate the current R
>> session.
>>
>> Usage:
>>
>> quit(save = "default", status = 0, runLast = TRUE)
>> q(save = "default", status = 0, runLast = TRUE)
>> .Last <- function(x) { ...... }
>>
>> Arguments:
>>
>> save: a character string indicating whether the environment
>> (workspace) should be saved, one of '"no"', '"yes"', '"ask"'
>> or '"default"'.
>>
>> status: the (numerical) error status to be returned to the operating
>> system, where relevant. Conventionally '0' indicates
>> successful completion.
>>
>>
>>
>>
>> Some error statuses are used by R itself. The default error
>> handler for non-interactive use effectively calls 'q("no", 1,
>> FALSE)' and returns error code 1. Error status 2 is used for R
>> 'suicide', that is a catastrophic failure, and other small
>> numbers
>> are used by specific ports for initialization failures. It is
>> recommended that users choose statuses of 10 or more.
>>
>> Valid values of 'status' are system-dependent, but '0:255' are
>> normally valid.
> ------------------------------------------------------------------------
> -----------------------------------------------------------------------
> Of the four combinations (R/S-Plus crossed with Windows/Linux), the
> only combination that I cannot get to work properly is R/Windows.
>
> The code below from Linux/R:
>>> q(status=34, "no")
>> P2: 72> echo $status
>> 34
> shows the expected response.
>
> When I replicate that R code in Windows, then type:
> 1. echo %status%: Windows echoes %status, indicating that the
> environment variable status was never set
> 2. echo %error level%: Windows echoes 1 (if i execute a normal quit
> command, i.e., without setting status, Windows echoes 0).
>
> So, it appears that in Windows, %errorlevel% is the (undocumented)
> equivalent of $status (Linux).
Actually, $status is shell-specific: $? is more standard (it comes from
sh, $status from tcsh). $status does not work in /bin/sh on Linux for me
(and I don't think it should).
And that %errorlevel% does contain the status on some Windows shells is
documented in the shell documentation.
> However, in Windows, the value
> returned appears to be limited to either 0 (normal exit) or 1 (status
> set to a non-zero value) despite the claim that "valid values ...
> [are] 0:255 (as is the case in Linux).
The claim is of course correct! E.g. in tcsh
> q("no", status=34)
[d:/R/svn/trunk/src/gnuwin32]% echo $status
34
and in cmd.exe
> q("no", status=34)
D:\R\R-2.6.1\bin>echo %errorlevel%
34
Note those examples are from Rterm: Rgui is a Windows GUI application and
the shell seeems to receive an error status from the GUI interface layer.
But then Rterm is intended for use in scripts, not Rgui.
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
More information about the R-help
mailing list