mirror of
https://github.com/fish-shell/fish-shell
synced 2025-01-13 05:28:49 +00:00
Always use "." for cd
Nobody doesn't want to use $PWD to cd, so if $CDPATH does not include it that was a mistake. Bash also appends "." here. Fixes #4484.
This commit is contained in:
parent
eeec6cc2fc
commit
b86200938f
6 changed files with 23 additions and 4 deletions
|
@ -8,6 +8,7 @@
|
|||
- Add `$pipestatus` support
|
||||
- macOS Mojave: fish.app can actually run (#5727), 10.14.4's Terminal.app no longer causes an error on launch (#5725)
|
||||
- fish no longer requires buffering for the last function in a pipeline.
|
||||
- cd now always checks the current directory, even if $CDPATH does not include it or "." (#4484).
|
||||
|
||||
### Syntax changes and new commands
|
||||
- None yet.
|
||||
|
|
|
@ -13,7 +13,7 @@ Description
|
|||
|
||||
If ``DIRECTORY`` is supplied, it will become the new directory. If no parameter is given, the contents of the ``HOME`` environment variable will be used.
|
||||
|
||||
If ``DIRECTORY`` is a relative path, the paths found in the ``CDPATH`` environment variable array will be tried as prefixes for the specified path.
|
||||
If ``DIRECTORY`` is a relative path, the paths found in the ``CDPATH`` list will be tried as prefixes for the specified path, in addition to $PWD.
|
||||
|
||||
Note that the shell will attempt to change directory without requiring ``cd`` if the name of a directory is provided (starting with ``.``, ``/`` or ``~``, or ending with ``/``).
|
||||
|
||||
|
|
|
@ -173,9 +173,8 @@ maybe_t<wcstring> path_get_cdpath(const wcstring &dir, const wcstring &wd,
|
|||
if (auto cdpaths = env_vars.get(L"CDPATH")) {
|
||||
cdpathsv = cdpaths->as_list();
|
||||
}
|
||||
if (cdpathsv.empty()) {
|
||||
cdpathsv.push_back(L".");
|
||||
}
|
||||
// Always append $PWD
|
||||
cdpathsv.push_back(L".");
|
||||
for (wcstring next_path : cdpathsv) {
|
||||
if (next_path.empty()) next_path = L".";
|
||||
if (next_path == L"." && !wd.empty()) {
|
||||
|
|
|
@ -7,3 +7,6 @@
|
|||
|
||||
####################
|
||||
# Virtual PWD inheritance
|
||||
|
||||
####################
|
||||
# CDPATH
|
||||
|
|
10
tests/cd.in
10
tests/cd.in
|
@ -62,6 +62,16 @@ test (realpath $output_pwd) = $real_getcwd
|
|||
and echo "BogusPWD test 2 succeeded"
|
||||
or echo "BogusPWD test 2 failed: $output_pwd vs $real_getcwd"
|
||||
|
||||
# $CDPATH
|
||||
logmsg CDPATH
|
||||
set -g CDPATH $base
|
||||
cd linkhome
|
||||
test $PWD = $base/linkhome; and echo Gone to linkhome via CDPATH
|
||||
set -g CDPATH /tmp
|
||||
cd $base
|
||||
test $PWD = $base; and echo Gone to base
|
||||
cd linkhome
|
||||
test $PWD = $base/linkhome; and echo Gone to linkhome via implicit . in CDPATH
|
||||
|
||||
# cd back before removing the test directory again.
|
||||
cd $oldpwd
|
||||
|
|
|
@ -23,3 +23,9 @@ cd:
|
|||
PWD is /tmp/cdcomp_test/linkhome
|
||||
BogusPWD test 1 succeeded
|
||||
BogusPWD test 2 succeeded
|
||||
|
||||
####################
|
||||
# CDPATH
|
||||
Gone to linkhome via CDPATH
|
||||
Gone to base
|
||||
Gone to linkhome via implicit . in CDPATH
|
||||
|
|
Loading…
Reference in a new issue