gpt4 book ai didi

linux - 通过 bash myscript.sh 与 ./myscript.sh 启动 bash 脚本

转载 作者:太空宇宙 更新时间:2023-11-04 09:33:39 25 4
gpt4 key购买 nike

有两种方法可以从 Linux CLI 执行 bash 脚本。

要么你这样做:

bash myscript.sh

或:

./myscript.sh

起初我认为这两种方法是相同的。但是我在工作中注意到 sudo bash 被系统管理禁用(即我需要 root 权限才能这样做)而 sudo ./ 没问题。

通过 bash myscript.sh./myscript.sh 启动脚本有什么区别?对于不允许用户通过 sudo bash myscript.sh 执行脚本而允许他执行 ./myscript.sh 是否有合理的解释?

最佳答案

这解决了内核如何找到并执行您刚刚键入的命令。

当你在当前目录中有一个文件并且你执行它时

./file

内核检查文件的权限,然后检查文件的第一行,如果找到 shebang line ,它只是使用它。一个合适的 Bash 脚本应该有 #!/bin/bash 或者可能有 #!/usr/bin/env bash,其中二进制文件的路径在不同的系统上可能不同(也许你的系统上的 /usr/bin/bash/usr/local/bin/bash 中有 Bash。

(如果文件没有您的 executable permission,您只会得到一个错误,文件的内容将被忽略。)

如果文件位于 PATH 的目录中,则无需指定其路径(在之前的例子中是相对路径 -- ./ 表示“在当前目录中”),它不需要在当前目录中。

bash

从您的PATH(可能是/bin/bash 之类的地方)找到一个名为bash 的二进制文件并执行它。在没有 shebang 行的情况下,将检查文件中的 magic marker。 ,在本例中是一个 ELF 二进制魔术标记,因此调用执行此类文件的例程。作为最后的回退,文件被传递到用户的默认 shell,如下所述。

最后,

bash ./file

bash file

启动 bash 并将 file 作为第一个参数。 (在后一种情况下,file 也可以是您的 PATH 上的文件。)这可能有两种结果;

  • 该文件包含一个有效的 Bash 脚本,它已被执行。
  • 该文件包含其他内容,但无论如何它都被解释为 Bash 命令。

还有

sh file

仅当文件包含 sh 命令时才是正确的,它是 bash 允许的命令的子集。使用 sh 执行 Bash 脚本是一个相当常见的错误(而使用 bash 执行正确的 sh 文件很好,尽管有点浪费,因为 Bash向后兼容 sh)。

关于 sudo,允许 sudo ./script 真的没有意义,因为用户可以简单地创建一个包含 bash -i< 的脚本 获得 root 权限。也许不允许 sudo bash 只是一种温和的插入,提醒特权用户不要过于草率地使用他们的特权(但如果他们不理解这种插入,它显然没有达到预期目的;和显然,系统的安全性已经非常值得怀疑了。)

关于linux - 通过 bash myscript.sh 与 ./myscript.sh 启动 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28878611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com