On Thu, Dec 19, 2019 at 01:10:46AM +0100, Marcin Zajączkowski wrote:
> Hi,
>
> Due to [1] I use "|| exit -2" to break script on a command execution
> failure in my backup script.
>
> However, I also want to have output written to a file. The following
> solution writes logs to a file, but silently ignores any failure in
> "my-backup":
> > my-backup 2>&1 | tee -a /tmp/some-log || exit -2
>
> I tried to keep the error in a variable (to check its state later on and
> fail), but it breaks output redirection at all:
> > my-backup 2>&1 || set ERR2 -2 | tee -a /tmp/some-log || exit -3
>
> Maybe keeping the first two commands in (logical) brackes would help,
> but () are in Fish reserved for something else.
>
> Is it possible in Fish to have a construction that allows to:
> 1. Run command and have output redirected (e.g. with "tee") also to a
> file (at least) in a case of success.
> 2. Break further commands execution in a case of failure (with "|| exit
> -2" or anything else).
Logical brackets in fish are "begin" and "end", so you can use
begin
my-backup 2>&1 || exit -2
end |
tee -a /tmp/some-log || exit -3
Fish 3.1.0 will have a $pipestatus variable, so you will be able to do
this instead:
my-backup 2>&1 | tee -a /tmp/some-log || exit -3
if test $pipestatus[1] -ne 0
exit -2 # my-backup failed
end
That being said, if you use `|| exit $status` a lot then it's probably
easier to use a POSIX shell with for this (non-interactive) script.
>
> ?
>
>
> [1] - https://github.com/fish-shell/fish-shell/issues/2389
>
> Marcin
>
> --
> https://blog.solidsoft.info/ - Working code is not enough
>
>
> _______________________________________________
> Fish-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/fish-users
_______________________________________________
Fish-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/fish-users