Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
realpath(3), symlinks, '..' components, and the ':A' word modifier
- X-seq: zsh-users 21728
- From: Daniel Shahaf <d.s@xxxxxxxxxxxxxxxxxx>
- To: zsh-users@xxxxxxx
- Subject: realpath(3), symlinks, '..' components, and the ':A' word modifier
- Date: Tue, 05 Jul 2016 04:57:56 +0000
- List-help: <mailto:zsh-users-help@zsh.org>
- List-id: Zsh Users List <zsh-users.zsh.org>
- List-post: <mailto:zsh-users@zsh.org>
- Mailing-list: contact zsh-users-help@xxxxxxx; run by ezmlm
Feedback is sought for a proposed behaviour change to the shell.
Currently, the ':a' word modifier removes '..' component from a path —
using a purely syntactic transformation, i.e., without consulting the
filesystem at all — and ':A' does the same and then resolves symlinks
[so no path component in the result is a symlink].
It has been proposed to change the semantics of :A to resolve symlinks
first and '..' components second, like the realpath(3) library function
does.
Under the incumbent semantics, $foo:A denotes the same file as $foo:a
(but not necessarily the same file as $foo). Under the proposed
semantics, $foo:A denotes the same file as $foo (but not necesarily the
same file as $foo:a).
Would this change be a good idea?
----- Forwarded message from Daniel Shahaf <d.s@xxxxxxxxxxxxxxxxxx> -----
> Date: Fri, 10 Jun 2016 17:36:23 +0000
> From: Daniel Shahaf <d.s@xxxxxxxxxxxxxxxxxx>
> To: zsh-workers@xxxxxxx
> Subject: [PATCH 2/3] Fix the ':A' word modifier on paths with '..' components.
> Message-ID: <1465580184-3095-2-git-send-email-danielsh@tarsus.local2>
> X-Seq: 38650
>
> This is an incompatible change; see the test and docs changes for details.
>
> Daniel
>
> Doc/Zsh/expn.yo | 6 ++++--
> README | 9 +++++++++
> Src/hist.c | 22 ++++++++++------------
> Test/D02glob.ztst | 6 ++++++
> 4 files changed, 29 insertions(+), 14 deletions(-)
>
> diff --git a/Doc/Zsh/expn.yo b/Doc/Zsh/expn.yo
> index c6e7b6f..50b8479 100644
> --- a/Doc/Zsh/expn.yo
> +++ b/Doc/Zsh/expn.yo
> @@ -225,9 +225,11 @@ intervening directories do not exist.
> )
> item(tt(A))(
> As `tt(a)', but also resolve use of symbolic links where possible.
> -Note that resolution of `tt(..)' occurs em(before) resolution of symbolic
> -links. This call is equivalent to tt(a) unless your system has the
> +This call is equivalent to tt(a) unless your system has the
> tt(realpath) system call (modern systems do).
> +
> +em(Note): In zsh 5.2 and earlier, resolution of `tt(..)' occurred em(before)
> +resolution of symbolic links.
> )
> item(tt(c))(
> Resolve a command name into an absolute path by searching the command
> diff --git a/README b/README
> index d5343db..84bb6bc 100644
> --- a/README
> +++ b/README
> @@ -79,6 +79,15 @@ Other aspects of EXIT trap handling have not changed --- there is still
> only one EXIT trap at any point in a programme, so it is not generally
> useful to combine POSIX and non-POSIX behaviour in the same script.
>
> +4) On systems that have the realpath(3) library function, the ':A' word
> +modifier now resolves symbolic links before '..' path components. This
> +could lead to different, but usually more desirable, results: the
> +tranformed value will now always identify the same directory entry as the
> +the pre-transformation value.
> +
> +The behaviour of 5.2 and older can be achieved by chaining modifiers:
> +'<expression>:a:A'.
> +
> Incompatibilities between 5.0.8 and 5.2
> ---------------------------------------
>
> diff --git a/Test/D02glob.ztst b/Test/D02glob.ztst
> index 8618378..dc1a655 100644
> --- a/Test/D02glob.ztst
> +++ b/Test/D02glob.ztst
> @@ -670,3 +670,9 @@
> () { set -- ${PWD}/$^@; print -l -- $@:A } glob.tmp/nonexistent/foo/bar/baz
> 0:modifier ':A' doesn't require existence
> *>*/glob.tmp/nonexistent/foo/bar/baz
> +
> + ln -s dir3/subdir glob.tmp/link
> + () { print ${1:A} } glob.tmp/link/../../hello
> + rm glob.tmp/link
> +0:modifier ':A' resolves symlinks before '..' components
> +*>*glob.tmp/hello
>
----- End forwarded message -----
Messages sorted by:
Reverse Date,
Date,
Thread,
Author