Why does the format of PS1 change after entering sh(/usr/bin/sh)?

Hi

I use fedora40, the following is my PS1 format.

user1@fedora:~$

If I enter sh, PS1 will become:

sh-5.2$

But when I checked the sh command, I found that it was just a soft link pointing to bash.

lrwxrwxrwx. 1 root root 4 Feb  9 08:00 /usr/bin/sh -> bash
lrwxrwxrwx. 1 root root 4 Feb  9 08:00 /bin/sh -> bash

This should mean that using sh is equivalent to calling bash, but judging from the format changes on PS1 that doesn’t seem to be the case.

I would like to ask what is the reason for this?

Thx

1 Like

I looked at the man page and found the answer:

If bash is invoked with the name sh, it tries to mimic the startup behavior of historical versions of sh as closely as possible, while conforming to the POSIX standard as well. When invoked as an interactive login shell, or a non-interactive shell with the --login option, it first attempts to read and execute commands from /etc/profile and ~/.profile, in that order. The --noprofile option may be used to inhibit this behavior. When invoked as an interactive shell with the name sh, bash looks for the variable ENV, expands its value if it is defined, and uses the expanded value as the name of a file to read and execute. Since a shell invoked as sh does not attempt to read and execute commands from any other startup files, the --rcfile option has no effect. A non-interactive shell invoked with the name sh does not attempt to read any other startup files. When invoked as sh, bash enters posix mode after the startup files are read.

Search for “invoked” in man bash.

3 Likes

Hi

Thank you for your reply.

2 Likes