Don't replace tilde for error messages if we have no $HOME

This was an issue with "--no-execute", which has no variables and
therefore no $HOME:

```fish
fish --no-execute /path/to/file
```

would say the error is in `~/path/to/file`.

Instead, since this is just for a message, we simply return the
filename without doing the replacement.

Fixes #10171
This commit is contained in:
Fabian Boehm 2023-12-28 10:18:00 +01:00
parent 81c8cd1b61
commit e318585021
2 changed files with 14 additions and 0 deletions

View File

@ -307,6 +307,11 @@ pub fn replace_home_directory_with_tilde(s: &wstr, vars: &dyn Environment) -> WS
if result.starts_with("/"L) {
let mut home_directory = "~"L.to_owned();
expand_tilde(&mut home_directory, vars);
// If we can't get a home directory, don't replace anything.
// This is the case e.g. with --no-execute
if home_directory.is_empty() {
return result;
}
if !home_directory.ends_with("/"L) {
home_directory.push('/');
}

View File

@ -23,5 +23,14 @@ echo "begin; echo oops" | $fish -n
echo $status
#CHECK: 127
echo "begin" > broken
$fish -n $PWD/broken
#CHECKERR: /{{.*}}broken (line 1): Missing end to balance this begin
#CHECKERR: begin
#CHECKERR: ^~~~^
#CHECKERR: warning: Error while reading file /{{.*}}broken
rm broken
# Littlecheck assumes a status of 127 means the shebang was invalid.
exit 0