Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > gnu.bash.bug > #14814

Re: built-in '[' and '/usr/bin/[' yield different results

Path csiph.com!goblin2!goblin1!goblin.stu.neva.ru!usenet.stanford.edu!not-for-mail
From Eric Blake <eblake@redhat.com>
Newsgroups gnu.bash.bug
Subject Re: built-in '[' and '/usr/bin/[' yield different results
Date Tue, 13 Nov 2018 11:54:29 -0600
Organization Red Hat, Inc.
Lines 52
Approved bug-bash@gnu.org
Message-ID <mailman.3986.1542131701.1284.bug-bash@gnu.org> (permalink)
References <5b86cf1c-d39a-befc-9734-5be8abd5cddd@heinzerling.com>
NNTP-Posting-Host lists.gnu.org
Mime-Version 1.0
Content-Type text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding quoted-printable
X-Trace usenet.stanford.edu 1542131701 11873 208.118.235.17 (13 Nov 2018 17:55:01 GMT)
X-Complaints-To action@cs.stanford.edu
To Service <service@heinzerling.com>, bug-bash@gnu.org, bash@packages.debian.org
Envelope-to bug-bash@gnu.org
User-Agent Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.3.0
In-Reply-To <5b86cf1c-d39a-befc-9734-5be8abd5cddd@heinzerling.com>
Content-Language en-US
X-Scanned-By MIMEDefang 2.79 on 10.5.11.12
X-Greylist Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.45]); Tue, 13 Nov 2018 17:54:31 +0000 (UTC)
X-detected-operating-system by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]
X-Received-From 209.132.183.28
X-BeenThere bug-bash@gnu.org
X-Mailman-Version 2.1.21
Precedence list
List-Id Bug reports for the GNU Bourne Again SHell <bug-bash.gnu.org>
List-Unsubscribe <https://lists.gnu.org/mailman/options/bug-bash>, <mailto:bug-bash-request@gnu.org?subject=unsubscribe>
List-Archive <http://lists.gnu.org/archive/html/bug-bash/>
List-Post <mailto:bug-bash@gnu.org>
List-Help <mailto:bug-bash-request@gnu.org?subject=help>
List-Subscribe <https://lists.gnu.org/mailman/listinfo/bug-bash>, <mailto:bug-bash-request@gnu.org?subject=subscribe>
Xref csiph.com gnu.bash.bug:14814

Show key headers only | View raw


On 11/13/18 10:29 AM, Service wrote:
>      # ensure that file1 exists and that file2 does not exist

There's your problem. It is inherently ambiguous what timestamp to use 
when a file is missing (infinitely new or infinitely old, or always an 
error for not existing); bash's -nt picked one way, while other shells 
have picked the other.  POSIX is silent on the matter (-nt is an 
extension outside of POSIX), so there is nothing portable you can rely on.

>      /bin/touch file1
>      /bin/rm -f file2
>      # built-in
>      if          [ file1 -nt file2 ]; then echo nt; else echo not_nt; fi
>      # external
>      if /usr/bin/[ file1 -nt file2 ]; then echo nt; else echo not_nt; fi
> 
>      # Output is as expected:
>      nt
>      nt

That is, bash's builtin '[' and coreutil's external '[' happened to pick 
the same thing: a missing file is treated as infinitely old.

> 
>      2. This does not work:
> 
>      # Put the above commands into a script, say check.sh
>      # Run with: /bin/sh < check.sh
>      # Or      : /bin/sh ./check.sh
>      # Or      : /usr/bin/env ./check.sh
> 
>      # Output is always not ok:
>      not_nt
>      nt

Most likely, this is because your /bin/sh is not bash, but probably 
dash, and dash has picked a missing file as being treated as always an 
error.  That does not make it a bug in bash, though, but a difference in 
behavior of your /bin/sh.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org

Back to gnu.bash.bug | Previous | Next | Find similar | Unroll thread


Thread

Re: built-in '[' and '/usr/bin/[' yield different results Eric Blake <eblake@redhat.com> - 2018-11-13 11:54 -0600

csiph-web