Bash 脚本对shebang行的使用与默认shell的使用不同吗?

Bash 脚本对shebang行的使用与默认shell的使用不同吗?,bash,ksh,shebang,Bash,Ksh,Shebang,我的脚本是使用shebang行开发的/bin/ksh,默认shell为 $echo$SHELL /bin/ksh 我正在移动所有这些脚本,而不将shebang行更改为默认shell所在的新机器 $echo$SHELL /bin/bash 我应该担心这个吗 我猜应该不会有任何问题,因为shebang行将覆盖解释器,并按照脚本中的定义和我希望的那样使用ksh 请分享您的想法。给出的假设是正确的:在任何高管电话中都会尊重谢邦热线。仅当您的脚本是源代码时。您的脚本或源代码您的脚本或缺少有效的sheban

我的脚本是使用shebang行开发的/bin/ksh,默认shell为 $echo$SHELL /bin/ksh

我正在移动所有这些脚本,而不将shebang行更改为默认shell所在的新机器 $echo$SHELL /bin/bash

我应该担心这个吗

我猜应该不会有任何问题,因为shebang行将覆盖解释器,并按照脚本中的定义和我希望的那样使用ksh


请分享您的想法。

给出的假设是正确的:在任何高管电话中都会尊重谢邦热线。仅当您的脚本是源代码时。您的脚本或源代码您的脚本或缺少有效的shebang,您需要关心它们是从哪个解释器调用的


如果这不是真的,那么非shell语言中的脚本就不会像预期的那样工作,因为Python解释器从来都不是系统的默认shell。

内核将使用shebang行来选择以默认方式执行脚本时要使用的适当解释器,无论它是sh、bash、ksh、expect、Python,或者别的什么。唯一需要注意的真正问题是在系统上编写的脚本,其中sh是一个特定的shell,例如bash,然后将其移动到另一个系统,其中sh是另一个shell,例如dash,因为它们可能使用前者中不存在的shell功能。

默认shell不会影响脚本的执行方式,除非您使用一个外壳做一些非常奇怪的事情

一个可执行的脚本,没有!行将与/bin/sh一起执行。实际上,这似乎不正确,但在任何情况下,您都不必担心这一点

只要您的脚本以开始/bin/ksh,并且您正常执行它们,系统将通过将它们传递给/bin/ksh来执行它们

您可能需要担心的一件事是/bin/ksh是否存在,如果存在,它是什么。在我的Linux Mint 17系统上,/bin/ksh是指向/etc/alternations/ksh的符号链接,而/etc/alternations/ksh又是指向/bin/ksh93的符号链接

脚本与/bin/ksh可能非常常见,几乎所有类似UNIX的系统都会满足它们的需求,并且会在该位置安装类似于ksh的东西


请注意,由$shell指定的默认shell不是系统范围的默认shell。它只是一个特定环境变量的值。根据/etc/passwd或等效文件中指定的shell,为每个用户在登录时设置该变量;因此,不同的用户可以有不同的默认shell。您可以在登录后更改$SHELL的值。/etc/passwd或等效项在创建帐户时设置,以后可以更改。大多数系统都有一个默认的用户shell,如果没有指定shell,则会为新帐户设置该shell。例如,大多数Linux系统用户/bin/bash。

你说得对:在任何execve调用中都会使用shebang行。只有当您的脚本是源代码时,您才需要关心调用它们的解释器。或者,如果列出的解释器不存在或不可执行或其他奇怪之处。非常感谢KeithA脚本的详细说明,没有!将由zsh和dash使用/bin/sh执行,但由ksh、bash和ash使用当前shell执行。@thatotherguy:很有趣,谢谢您的更正。当然,如果你总是使用!你不必担心,谢谢你的澄清,查尔斯汉克斯,谢谢你的澄清