【问题标题】:What is the difference between "./somescript.sh" and ". ./somescript.sh"“./somescript.sh”和“../somescript.sh”有什么区别
【发布时间】:2010-04-14 00:58:13
【问题描述】:

今天我按照一些说明在 Linux 中安装软件。有一个脚本需要先运行。它设置了一些环境变量。

指令告诉我执行. ./setup.sh,但我执行./setup.sh出错了。所以没有设置环境。最后我注意到了这一点并继续前进。

我想知道这两种调用脚本的方法之间的区别。我对 Linux 完全陌生,所以请尽可能详细。

【问题讨论】:

  • 仅供参考——写这些说明的人可能应该要求你写source ./setup.sh而不是. ./setup.sh以减少歧义;你犯的错误很常见。
  • @Charles Duffy 感谢您指出这一点。是的,这些说明是供内部使用的,所以我猜它们是为大师准备的。
  • source 仅适用于 Bash,而 . 可移植到 Bourne shell。如果说明不是 Bash 特定的,则不能使用 source,即使它更具可读性。

标签: linux shell


【解决方案1】:

./setup.sh 运行脚本,将启动一个新的 shell 来运行脚本。新的 shell 不会影响启动脚本的父 shell。

. ./setup.shsource ./setup.sh 的简写,它将在当前 shell 中运行脚本,而不是启动新的 shell 来运行它。这意味着脚本可以改变当前 shell 的行为,例如设置新的环境变量。

【讨论】:

    【解决方案2】:

    编辑:我刚刚意识到我没有回答你问题的另一部分..但是 leeroy 的回答做到了。我有点回答了其他问题,但我希望它有所帮助:-)

    sh 函数在您提供给它的脚本上运行 bash。有关更多信息,请参阅 the man page,但您可以看到 sh 基本上是 bash 的同义词

    当您运行脚本ala ./setup.sh 时,它会根据文件顶部的内容来识别脚本,通常称为"Shebang"

    一个 bash 脚本会有

    #!/bin/sh
    

    或类似文件顶部,允许您使用点法。你也可以使用其他的东西,比如 Python 脚本可以有

    #!/usr/bin/env/python
    

    如果您的路径正确,它会将脚本作为 Python 脚本运行,而不是使用点符号的 bash 脚本。

    希望以简单的方式解释它!

    【讨论】:

    • 没错,但它并没有回答问题。关键是. ./setup.sh可以改变当前的shell,./setup.sh不能。
    【解决方案3】:

    只需运行“source /path/to/setup.sh

    这将在当前 shell 中设置环境变量。

    【讨论】:

      【解决方案4】:

      . 指的是当前目录。所以./script.sh 表示在当前目录运行脚本。

      ../script.sh 将在父目录中运行 script.sh。

      . ./script.sh(点之间有一个空格)在 csh 等一些 shell 中会报错,但在 bash 中,. foosource foo 的简写。

      【讨论】:

      • 刚刚想通了。我在 csh 中尝试过,它说“找不到命令”。我现在看到在 bash 中它是“源”的快捷方式。
      猜你喜欢
      • 2015-11-02
      • 2010-10-02
      • 2011-12-12
      • 2010-09-16
      • 2012-03-14
      • 2012-02-06
      • 2011-02-25
      • 2011-11-22
      • 2015-03-26
      相关资源
      最近更新 更多