【问题标题】:How do I specify the Bourne shell (not sh)如何指定 Bourne shell(不是 sh)
【发布时间】:2016-01-01 23:38:01
【问题描述】:

我正在编写一个脚本,我希望它从 Bourne shell 开始。据我了解,启动脚本:

#! /bin/sh

并不总是指定 Bourne shell,而是指定操作系统链接到 /bin/sh 的任何内容。有没有办法明确指定 Bourne?

谢谢!

【问题讨论】:

  • 你的意思是像'#!/bin/bash'这样的东西吗?见here
  • 感谢您的评论,但我实际上特别不想要 Bash。我需要专门使用 Bourne shell。
  • 好吧,正如您在问题中所说,这会改变系统,因此您也必须在脚本中进行更改,大部分时间它指向bash
  • 如果我系统上的#!/bin/sh 指向 bash,我就无法强制使用 bourne 而不是 bash?
  • hashbang 始终是特定路径;一般来说,您不能指定外壳。

标签: bash shell unix scripting sh


【解决方案1】:

取决于你所说的“Bourne Shell”是什么意思。

  1. 原始的 Bourne Shell,我相信这不是您想要的:

    • 专有,非常有限,仅在某些真正的 UNIX 上可用 Solaris 等系统源自原始的 AT&T UNIX 代码。
    • #!/bin/sh 是获取此非便携式外壳的方法。
    • 它能够运行真正的遗留脚本,而且它的体积很小, 是我心中唯一的资产。 今天的记忆使尺寸资产的吸引力降低。
  2. 基于 Bourne shell 语法的现代 shell。相反,说 csh。

    • bash、ksh、zsh 都是一些。 Bash 在 Linux 环境中很常见,是的,/bin/sh 倾向于链接到其中之一。

    • 要使用特定的 shell,请使用 which $SHELL 之类的东西 获取绝对路径。

    • #!/bin/env bash 较少依赖路径的改组 在不同的操作系统中找到。

      但是这种便携的技巧有选择的风险 如果 PATH 设置得不够好,则错误的 shell 并且 不允许在 shell 上使用参数,例如 -x

      它有优势 PATH 能够控制你使用几个 shell 中的哪一个 可以使用相同外壳的不同版本,其中 ksh 非常有名。

因此,如果您需要更多帮助,您确实需要详细说明您所追求的应用程序,以及您对“Bourne Shell”的定义。

【讨论】:

  • "#!/bin/sh 是获取此非便携式外壳的方法。" -- 在具有/bin/sh 的系统中。大多数现代的 unix-like 可能没有,而是有一些更新的 POSIX sh 兼容的 shell。
【解决方案2】:

在第一行放置一个冒号 (:)。我在旧系统上使用它 (A/UX,SCO Unix,Interactive Unix System V Release 3.2 SVR3,大约 1989,想到)作为文件中的第一个字符来表示 Bourne Shell 脚本。它也被 Thompson Toolkit 的 Korn 认可 外壳(DOS > v3.2)。允许 Unix 程序员在 PC环境(DOS/WindowsNT)。

是的,我老了。 Unix 程序员永远不会死,他们只是变成了僵尸进程。

【讨论】:

    【解决方案3】:

    原始的 Bourne Shell 不是开源的,所以如果你还没有它,你就是 SOL。

    如果您已经拥有它,只需将位置放在 shebang 中即可。

    就这么简单。

    【讨论】:

    • 你的意思是像#!/bin/bourne
    • @R4F6 - 是的,如果你真的有 bourne shell (你没有,我现在告诉你) 它位于/bin/bourne那么是的,那会起作用。但由于我是千里眼,并且已经知道你没有它,所以那是行不通的。
    猜你喜欢
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 2011-01-13
    • 2015-05-28
    • 2012-05-08
    • 1970-01-01
    • 2011-01-07
    • 2014-04-12
    相关资源
    最近更新 更多