Debian - bash 是默认 shell,但“man sh”给出破折号

ACK*_*low 3 debian bash shell man dash-shell

在Debian上挤。运行ps -p $$showbash是我当前的 shell,ls -l $(which sh)showssh是到bash. 那么,为什么当我运行时man sh,我会得到 的手册页dash?这只是 Debian 中的一个错误吗?

der*_*ert 9

系统默认 shell 与您的用户 shell 不同。在我的系统上,dash是系统默认值,但我bash在登录时使用:

anthony@Zia:~$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar  1  2012 /bin/sh -> dash
Run Code Online (Sandbox Code Playgroud)

因此,带有#!/bin/shup top的 shell 脚本使用 dash 运行。

听起来您的系统不知何故有一半,其中 /bin/sh 符号链接和联机帮助页符号链接不同步。我系统上的联机帮助页符号链接是:

anthony@Zia:~$ ls -l /usr/share/man/man1/sh.1.gz 
lrwxrwxrwx 1 root root 9 Mar  1  2012 /usr/share/man/man1/sh.1.gz -> dash.1.gz
Run Code Online (Sandbox Code Playgroud)

如果您手动更改了 /bin/sh 之一,您也必须更改那个。处理这些符号链接也可能存在错误;mpy 指出了错误 #662159

每个用户都有一个设置,用于在登录时调用哪个 shell。这是每个用户的设置,存储在 中/etc/passwd,因此系统范围的联机帮助页无法反映它。每个用户都可以通过运行更改他/她的 shell 设置chsh(当然,root 可以更改其他用户的 shell 设置)。

还有一个SHELL环境变量,它在登录时设置,但可以更改。通常,它会在/etc/passwd例如xterm需要启动 shell时覆盖 shell 字段。