特定用户使用不同的 /bin/sh

特定用户使用不同的 /bin/sh

我正在运行一个 Ubuntu 发行版,其中/bin/sh有一个指向 的符号链接/bin/dash。虽然这对我的大多数用户来说都没问题,但其中肯定有一个用户bin/sh“符号链接”到了/bin/bash

这可能吗?我不确定该怎么做。

问候。

答案1

[…] 其中一个必须已/bin/sh符号链接到/bin/bash

我怀疑实际情况是:

[…] 他们中的一个编写了一些带有 Bashisms 的糟糕的 shell 脚本,并且不想修复 xyr 糟糕的脚本。

显然,您无法为每个用户创建符号链接。因此,请让您的用户将这些 Bashisms 从用作/bin/sh解释器的任何 shell 脚本中移除,并将其放入/bin/bash(或 piernov 提到的替代方案)任何真正应该将 Bourne Again shell 用作脚本解释器的 shell 脚本中。

如果这些脚本假设这sh只是 Bourne Again shell,或者它们依赖于 Bashisms,而实际上并没有以 as 调用 Bourne Again shell (如果想要相当数量的 Bashisms,bash即使以 as 调用也是错误的),那么sh破碎的并应予以修补。

进一步阅读

答案2

/bin/sh只是一个 Bourne shell。dash 和 bash 都可以充当与 sh 兼容的 shell,而且由于原始的 Bourne shell 不再使用,sh 通常是 bash 或 dash(主要在 Ubuntu 上)的符号链接,甚至是 zsh。

但是,使用 sh 时,您不应使用特定 shell 的任何特性。这就是为什么带有#!/bin/shshebang 的脚本不应依赖任何 bashism 的原因。当它使用 bash 的任何特性时,它应该使用#!/usr/bin/env bash。这是用于运行脚本的 shell。

shell 的另一个方面是用户使用的命令提示符。大多数情况下,它定义在 中/etc/passwd,具体选择取决于您使用的发行版。如果默认使用破折号,您显然可以/etc/passwd为特定用户更改 中的行并输入/usr/bin/bash

最后,即使这不是一个好主意,如果您确实希望sh运行该命令bash,如果它在 shell 中,您应该能够运行alias它,或者在另一个目录中创建指向它的符号链接(~/bin例如),然后将其添加到 PATH()的前面export PATH="~/bin:${PATH}"

相关内容