mirror of
https://github.com/fish-shell/fish-shell.git
synced 2025-03-15 23:22:53 +08:00
resolve: Normalize
This means "../" components are cancelled out even after non-existent paths or files. (the alternative is to error out, but being able to say `path resolve /path/to/file/../../` over `path resolve (path dirname /path/to/file)/../../` seems worth it?)
This commit is contained in:
parent
dfded633c6
commit
5cce6d01ad
@ -675,6 +675,11 @@ static int path_resolve(parser_t &parser, io_streams_t &streams, int argc, const
|
||||
}
|
||||
}
|
||||
|
||||
// Normalize the path so "../" components are eliminated even after
|
||||
// nonexistent or non-directory components.
|
||||
// Otherwise `path resolve foo/../` will be `$PWD/foo/../` if foo is a file.
|
||||
real = normalize_path(*real, false);
|
||||
|
||||
// Return 0 if we found a realpath.
|
||||
if (opts.quiet) {
|
||||
return STATUS_CMD_OK;
|
||||
|
@ -118,6 +118,10 @@ path resolve bin//sh | string match -r -- 'bin/bash$'
|
||||
# sh here is bash
|
||||
# CHECK: bin/bash
|
||||
|
||||
# "../" cancels out even files.
|
||||
path resolve bin//sh/../ | string match -r -- 'bin$'
|
||||
# CHECK: bin
|
||||
|
||||
# `path resolve` with nonexistent paths
|
||||
set -l path (path resolve foo/bar)
|
||||
string match -rq "^"(pwd -P | string escape --style=regex)'/' -- $path
|
||||
|
Loading…
x
Reference in New Issue
Block a user