如我错了请纠正我:
- “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/bash
shebang - 在 GNU/Linux 中,/bin/sh 是 Bash这取决于分布。例如,它也可以在 Debian
dash
上。mksh
- 在 FreeBSD 中,/bin/sh 不是 bash,它是真正的 sh。有很多
sh
实现。哪一个是“真实的”?在 FreeBSD 上,sh
基于 Almquist shelldash
或 NetBSDsh
。在 OpenBSD 上,它基于pdksh
,在许多商业 Unices 上,它基于 ksh88(这是 Unix/POSIXsh
规范的基础)。一些ksh88
基于 的 shellbash
是仅有的两个已被认证为 Unix 兼容sh
实现的 shell(当使用正确的标志构建并在正确的环境中时)。
如果您有带有/bin/sh
shebang 的脚本并希望它们被执行,zsh
您可以尝试将脚本传递给zsh
,但只要该脚本调用另一个脚本(并且您不想修改它),这就会失败。
所以我只看到有可能从/bin/sh
您的zsh
.但我不建议这样做,因为它可能会对您的启动时间产生巨大影响,甚至对您的某些 Linux 脚本没有帮助。
答案4
如果您确实想/bin/bash
在 FreeBSD 中运行基于 Linux 的书面脚本而不修改它们,那么您只需复制/usr/local/bin/bash
到/bin/bash
FreeBSD 即可运行。