[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug #40431] .SHELLFLAGS is passed to shell as single argument.
From: |
Van de Bugger |
Subject: |
[bug #40431] .SHELLFLAGS is passed to shell as single argument. |
Date: |
Wed, 30 Oct 2013 21:15:33 +0000 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0 |
URL:
<http://savannah.gnu.org/bugs/?40431>
Summary: .SHELLFLAGS is passed to shell as single argument.
Project: make
Submitted by: van_de_bugger
Submitted on: Wed 30 Oct 2013 09:15:32 PM GMT
Severity: 3 - Normal
Item Group: None
Status: None
Privacy: Public
Assigned to: None
Open/Closed: Open
Discussion Lock: Any
Component Version: 3.82
Operating System: POSIX-Based
Fixed Release: None
Triage Status: None
_______________________________________________________
Details:
I am trying to use .ONESHELL. I want shell to stop executing commands as soon
as a command returns non-zero status. Here is my test Makefile:
.ONESHELL :
all :
false
echo "OK"
Ok, the test:
$ make
false
echo "OK"
OK
Oops, false returns non-zero status, but shell continues, it's bad. "set -e"
as the first command of the recipe helps, but it is too boring and error-prone
to add a command to every recipe. Let us try .SHELLFLAGS -- it seems it is
what I need:
.SHELLFLAGS = -e -c
Oops:
$ make
false
echo "OK"
/bin/sh: - : invalid option
make: *** [all] Error 1
Error message is rather unclear. "-" is an invalid option? Ok, let us try
another variant:
.SHELLFLAGS = -ec
$ make
false
echo "OK"
make: *** [all] Error 1
Ok, good. But it seems make treats value of .SHELLFLAGS as single argument. It
may be suitable in simple cases, but it is not good in more complex
scenarios.
Now let us try solve another task: Stop execution if *any* command in pipe
fails. Here is modified Makefile:
.ONESHELL :
.SHELLFLAGS = -ec
all :
false | true
echo "OK"
By default, status of pipe is a status of the last command. Thus, "true" will
hide a problem occurred before, and execution will continue:
$ make
false | true
echo "OK"
OK
I want the process stopped. It could be done by bash command
set -o pipefail
(All the commands in pipe will be completed, but execution will not go
further.) Unfortunately, there is no short one-letter option to enable
pipefail which can be bundled with -ec. The only way to enable pipefail is "-o
pipefail", but
.SHELLFLAGS = -o pipefail -ec
does not work.
Resume: I think it would be helpful if make splits value of .SHELLFLAGS into
words and pass every word to shell as a separate argument.
_______________________________________________________
Reply to this item at:
<http://savannah.gnu.org/bugs/?40431>
_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
- [bug #40431] .SHELLFLAGS is passed to shell as single argument.,
Van de Bugger <=