./script 和 bash 脚本有区别吗?

./script 和 bash 脚本有区别吗?

给定一个 shell 脚本文件,开头为

#!/bin/bash

# (bash script here),

并已编辑,运行和命令行chmod +x有什么区别吗?./scriptbash script

答案1

这取决于你的$PATH./script会跑/bin/bash scriptbash script将使用bash路径中最先出现的任何内容,这不一定/bin/bash,并且可能是 Bash 的不同版本。

答案2

有两个区别:

  • ./tryit.sh如果 bash 不在 中,则不会运行/bin,但bash tryit.sh如果 bash 位于PATH.这是因为./tryit.sh将使用 bang 路径 ( ) 中的 shell ,/bin/bashbash tryit.sh将使用. bashPATH
  • ./tryit.sh如果未设置执行位,则不会运行,但bash tryit.sh会运行脚本。您已通过指定已设置该位来排除这种情况。某些编辑可能会清除该位,导致工作命令开始失败。

该命令bash tryit.sh调用 bash 告诉它要执行的命令已在文件中找到tryit.sh。许多程序(例如 awk、perl、python、bash、sh、ksh)都以这种方式工作。这是处理命令文件的 Unix 程序的标准 idom。

答案3

它们略有不同并且很容易犯错误。

你应该使用的(我将用两种形式编写)

./script
bash ./script

我的理由是,这是明确的,以防您更改目录。

非显式形式

script
bash script

安全性较差。bash script将搜索当前目录,然后搜索 PATH 环境变量中的目录,script其本身仅在 PATH 目录中搜索。运行与预期不同的命令可能会破坏您的文件。

答案4

如果我没记错的话,以下两个完全相同的:

$ ./script

$ source script

所以使用./“命令”实际上会source在引擎盖下调用,它本身是一个bash内置命令。或者,在另一种解释中,它们可能被称为彼此的别名。 然而:第一次调用要求您(用户)为所有者或组设置+x(=可执行)标志chmod,否则您将收到“权限被拒绝”错误,而使用该source命令执行甚至是可能的没有旗帜+x。因此bash,例如,当您想要从 NTFS 格式的随身碟运行脚本时,后者有时会成为您的救星,因为它chmod无法在那里工作。

思考这也会以某种方式回答你的问题。

因为,因此,bash scriptsource script不可能完全相同;一个正在调用bash程序本身将您的脚本作为参数给出,而另一个正在调用其中bash之一内置命令将您的脚本作为参数。尽管结果很可能是相同的(至少在日常使用中),但在这两种情况下实现该结果的方式有些不同。

相关内容