Currently fish_greeting function is defined as:
| function fish_greeting | |
| if not set -q fish_greeting | |
| set -l line1 (_ 'Welcome to fish, the friendly interactive shell') | |
| set -l line2 \n(printf (_ 'Type %shelp%s for instructions on how to use fish') (set_color green) (set_color normal)) | |
| set -g fish_greeting "$line1$line2" | |
| end | |
| if set -q fish_private_mode | |
| set -l line (_ "fish is running in private mode, history will not be persisted.") | |
| set -g fish_greeting $fish_greeting.\n$line | |
| end | |
| # The greeting used to be skipped when fish_greeting was empty (not just undefined) | |
| # Keep it that way to not print superfluous newlines on old configuration | |
| test -n "$fish_greeting" | |
| and echo $fish_greeting | |
| end |
When $fish_greeting is empty, the $fish_greeting.\n$line will expand into a empty string, so fish --private won't show any message either.
I wonder if it makes sense to still show the private mode message ("fish is running in private mode, history will not be persisted."), even if $fish_greeting is empty.
Also, there's a slight inconsistency:
$ set -U fish_greeting $ fish -P (no message) --- $ set -U fish_greeting "" $ fish -P . fish is running in private mode, history will not be persisted.
For reference, there is a similar issue: #6299