【问题标题】:what's the difference between ./script.sh and bash script.sh./script.sh 和 bash script.sh 有什么区别
【发布时间】:2012-09-01 01:01:19
【问题描述】:

在linux系统上,这两种不同方式踢script.sh有什么区别吗?

它们完全一样吗?

谢谢

【问题讨论】:

  • 我是一个 bash nubie,但我知道的一个区别是环境变量在执行脚本时具有本地范围,但采购脚本会将任何定义添加到父范围
  • @DeepYellow:在发出命令source script.sh 或. script.sh 时会发生脚本的获取
  • @DeepYellow:是的,但这个问题与采购脚本无关。因此,您的评论有点令人困惑和误导。
  • @knittl 你是对的!我看错了,谢谢指出。

标签: linux bash


【解决方案1】:

./script.sh 期望此文件在当前目录中,已设置执行位,并且文件的第一行是解释器开始的路径(Shebang 行)

bash script.sh 表示您调用 bash 并将要执行(解释)的文件内容作为 bash 命令传递。这样你的文件就不需要是可执行文件并且有一个 shebang 行。

如果满足 ./script.sh 的条件,则两次调用都会导致相同的结果。

【讨论】:

  • shebang 在大多数环境中不是强制性的(默认假定为 sh)
【解决方案2】:

为了使第一种形式工作,文件必须设置可执行位,其次它需要有一个shebang,它指定将使用哪个解释器。

所以是的,两种形式是相同的(当涉及到将被解释的内容时)。

有关历史课程,请参阅this

可以在 linux-kernel 中找到 she-bang 解析的当前实现here

【讨论】:

    【解决方案3】:

    不一定相同。

    如果你运行 script.sh linux 将搜索 $PATH 环境变量中设置的目录。

    使用 ./script.sh,linux 将运行位于您在调用时所在目录中的脚本。

    【讨论】:

    • 虽然这是正确的,但它并不能真正回答 OP 的问题。他们没有问过单独使用文件名会发生什么。
    • 嗯,你是对的,我误解了这个问题。感谢您的澄清
    【解决方案4】:

    我不认为这完全一样。

    据我了解,您只需在 current shell 上执行带有./script.sh 的脚本。它不必是你正在运行的 bash (Bourne Again SHell),它可以是你系统上安装的任何 shell。

    如果您使用bash script.sh 执行脚本,您会告诉系统您希望使用 bash shell 显式执行该脚本。

    您可以通过调用以下命令查看哪些 shell 可用于您的系统:

    $ cat /etc/shells 
    # /etc/shells: valid login shells
    /bin/sh
    /bin/dash
    /bin/bash
    /bin/rbash
    

    【讨论】:

    • ./script.sh 启动一个新的子 shell,即脚本不在当前 shell 中运行。实际的子外壳由 shebang (#!) 行确定。如果文件中不包含任何 shebang 行,默认为 sh
    【解决方案5】:

    script.sh 可以被称为 script.anything,正如欺负中的 knittl 帖子上指出的那样,该脚本由

    标识
    #!/whatever/it/is
    

    正在运行 bash ./script.something 意味着您告诉它使用 bash 执行脚本,这可能会返回错误而不是运行也欺负忘记

    #!/usr/bin/perl
    

    所以你可以有一个名为 script.sh 的 perl 脚本

     cat perl.sh 
    #!/usr/bin/perl
    
    print "Hello World\n";
    :~/Documents$ ./perl.sh 
    Hello World
    
    ~/Documents$ bash ./perl.sh 
    Warning: unknown mime-type for "Hello World\n" -- using "application/octet-stream"
    Error: no such file "Hello World\n"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 1970-01-01
      • 2016-08-19
      相关资源
      最近更新 更多