在 Ubuntu 22.10 上配置 bash 而不是 dash

在 Ubuntu 22.10 上配置 bash 而不是 dash

在全新安装的 Ubuntu 22.10 上,我尝试了以下命令

sudo dpkg-reconfigure dash

他什么也没做

我从中学到邮政该功能已被删除。

那么,将 bash 设为系统 shell 的正确且干净的方法是什么(例如/bin/sh)?我希望我不必亲自处理可执行文件、手册页和所有需要的内容的符号链接……

答案1

dash我认为你知道和之间的区别bash...尽管dash脚本应该一般来说运行没有问题bash...(但反之亦然),建议不要更改系统的默认 shell,因为系统脚本是为默认 shell 编写的,将来可能会出现差异/问题。

了解并遵守当前版本的FHS(文件系统层次标准,定义/bin/sh

sh POSIX 兼容命令 shell

如果/bin/sh不是 POSIX 兼容的 shell 命令本身,则它必须是指向真实 shell 命令的硬链接或符号链接。

这就是说...sudo dpkg-reconfigure dash当选择时no,会更改这些符号链接:

$ ls -l /bin/sh /bin/sh.distrib /usr/share/man/man1/sh.1.gz 
lrwxrwxrwx 1 root root 4 Jan 20 16:10 /bin/sh -> dash
lrwxrwxrwx 1 root root 4 Jan 20 15:42 /bin/sh.distrib -> bash
lrwxrwxrwx 1 root root 9 Jan 20 16:10 /usr/share/man/man1/sh.1.gz -> dash.1.gz

到这些符号链接:

$ ls -l /bin/sh /bin/sh.distrib /usr/share/man/man1/sh.1.gz 
lrwxrwxrwx 1 root root 4 Jan 20 16:10 /bin/sh -> bash
lrwxrwxrwx 1 root root 4 Jan 20 16:10 /bin/sh.distrib -> dash
lrwxrwxrwx 1 root root 9 Jan 20 16:10 /usr/share/man/man1/sh.1.gz -> bash.1.gz

选择时反之亦然yes

再说一遍...虽然仅仅创建符号链接会有相同的系统 shell 和man sh行为结果,但值得注意的是sudo dpkg-reconfigure dashdpkg消遣...因此存在...这将具有识别变化并相应地处理这些文件sh.distrib的附加效果:dpkg

文件转移是一种强制 dpkg(1) 不将文件安装到其位置而是安装到转移位置的方法。当文件引起冲突时,可以通过 Debian 软件包脚本使用转移来移走文件。系统管理员还可以使用它来覆盖某些软件包的配置文件,或者在安装包含这些文件的较新版本的软件包时,当 dpkg 需要保留某些文件(未标记为“conffiles”)时

选择时的转移no如下:

Removing 'diversion of /bin/sh to /bin/sh.distrib by dash'
Adding 'diversion of /bin/sh to /bin/sh.distrib by bash'
Removing 'diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by dash'
Adding 'diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by bash'

这样做是这样的:

$ sudo dpkg-divert --package dash --remove /bin/sh
$ sudo dpkg-divert --package bash --divert /bin/sh.distrib --add /bin/sh
$ sudo dpkg-divert --package dash --remove /usr/share/man/man1/sh.1.gz
$ sudo dpkg-divert --package bash --divert /usr/share/man/man1/sh.distrib.1.gz --add /usr/share/man/man1/sh.1.gz

选择时yes如下:

Removing 'diversion of /bin/sh to /bin/sh.distrib by bash'
Adding 'diversion of /bin/sh to /bin/sh.distrib by dash'
Removing 'diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by bash'
Adding 'diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by dash'

这样做是这样的:

$ sudo dpkg-divert --package bash --remove /bin/sh
$ sudo dpkg-divert --package dash --divert /bin/sh.distrib --add /bin/sh
$ sudo dpkg-divert --package bash --remove /usr/share/man/man1/sh.1.gz
$ sudo dpkg-divert --package dash --divert /usr/share/man/man1/sh.distrib.1.gz --add /usr/share/man/man1/sh.1.gz

因此,如果您执行符号链接,然后相应地进行转移,您应该获得与运行相同的最终结果sudo dpkg-reconfigure dash

相关内容