我可以在 FreeBSD 中运行 Bash 脚本而不修改它们吗?

我可以在 FreeBSD 中运行 Bash 脚本而不修改它们吗?

如我错了请纠正我:

  • “sh”脚本!=“bash”脚本
  • Linux 脚本是用 Bash 编写的
  • Bash 脚本通常#!/bin/sh
  • 在 GNU/Linux 中,/bin/sh是 Bash
  • 在 FreeBSD 中,/bin/sh不是 bash,而是 truesh

因此,如果我想在 FreeBSD 中使用 Linux 脚本,并且./script.sh在 shell 中运行,它将在“sh”中运行 Bash 脚本,而不是 Bash,因为/bin/sh在 FreeBSD 中不是 Bash。

有没有办法可以运行这些 Bash 脚本而不修改它?那么没有修改#!/bin/sh脚本文件中的语句来指向其他地方吗?

如果可能的话,我想通过 Zsh 运行 Bash 脚本。不想安装 Bash,并且由于 Zsh 可以运行 Bash 脚本...

答案1

您可以使用脚本作为参数来调用您最喜欢的 shell。

bash ./script.sh

答案2

我自己运行 FreeBSD。我发现使用以下命令启动脚本可以极大地提高跨操作系统兼容性:

#!/usr/bin/env bash

答案3

当你错了的时候,你要求纠正你。我会尽力:

  • Linux 脚本是用 bash 编写的:嗯,有些是为 POSIX 兼容的 shell 编写的bash,其他的dash则希望可以适用于任何 POSIX 兼容的 shell。
  • Bash 脚本通常是 #!/bin/sh如果他们依赖非标准bash功能,强烈建议使用#!/bin/bashshebang
  • 在 GNU/Linux 中,/bin/sh 是 Bash这取决于分布。例如,它也可以在 Debiandash上。mksh
  • 在 FreeBSD 中,/bin/sh 不是 bash,它是真正的 sh。有很多sh实现。哪一个是“真实的”?在 FreeBSD 上,sh基于 Almquist shelldash或 NetBSD sh。在 OpenBSD 上,它基于pdksh,在许多商业 Unices 上,它基于 ksh88(这是 Unix/POSIXsh规范的基础)。一些ksh88基于 的 shellbash是仅有的两个已被认证为 Unix 兼容sh实现的 shell(当使用正确的标志构建并在正确的环境中时)。

如果您有带有/bin/shshebang 的脚本并希望它们被执行,zsh您可以尝试将脚本传递给zsh,但只要该脚本调用另一个脚本(并且您不想修改它),这就会失败。

所以我只看到有可能从/bin/sh您的zsh.但我不建议这样做,因为它可能会对您的启动时间产生巨大影响,甚至对您的某些 Linux 脚本没有帮助。

答案4

如果您确实想/bin/bash在 FreeBSD 中运行基于 Linux 的书面脚本而不修改它们,那么您只需复制/usr/local/bin/bash/bin/bashFreeBSD 即可运行。

相关内容