【问题标题】:how does " . ./filename " command work“../filename”命令如何工作
【发布时间】:2017-05-03 20:00:50
【问题描述】:

我正在关注关于 openvpn 的教程,它需要执行命令 . ./vars。它显示一条消息。在阅读文件时,我发现它在文件中执行了一个 echo 命令,而忽略了文件中的所有其他内容。在添加其他 echo 语句时,它也会被执行。所以我想对此进行一些基本的解释。这仅与 bash 有关吗?

【问题讨论】:

  • 这可能会有所帮助:help .
  • 可以使用 . (source) 内置 bash 命令而无需完整或相对文件路径:. vars 但在这种情况下,. 命令会在目录中搜索其参数在$PATH 变量中列出。当您的文件具有可以在某些系统bin目录中使用的名称时,可能会选择错误的文件:. echo. ./echo
  • 我认为被忽略的行看起来像dir="/home/someone"。这些行不会被忽略(以 # 开头的行被跳过,它们是 cmets),但会被执行:它将为名称为 dirvar 提供 = 右侧的值(没有空格大约=)。你可以试试echo "me=${me}"; me=Anmol; echo "me=${me}"
  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserUnix & Linux Stack Exchange 会是一个更好的提问地方。另见Where do I post questions about Dev Ops?

标签: linux bash shell dot-source


【解决方案1】:

.source 是同义词:它只是在当前 shell 中逐行运行文件。 ./vars 只是当前目录中某个名为 vars 的文件的路径。所以该命令所做的就是逐行运行文件vars

至于你的其他问题,我不太明白你在问什么。你能澄清一下吗?

【讨论】:

  • 更准确地说,source. 的(可选)同义词,因为. 是该命令的规范名称。 (见posix。)
【解决方案2】:

开头的. 有解释here./filename 是对文件的相对引用。

【讨论】:

    【解决方案3】:

    . 将 bash 脚本源或导入到您正在处理的当前脚本(如果您正在创建脚本)或当前 tty(终端或命令行),如果您正在使用命令行界面。它所获取的脚本必须是可执行文件(它应该设置了 -x 标志)

    ./filename 表示在当前目录中查找文件名。如果您仅在 tty(终端或命令行)或脚本中执行 ./filename,它会查找文件名并检查文件名是否可执行,然后运行文件名.您不应该认为./ 表示当前工作目录。使用两个点(../filename)而不是一个带文件名的点告诉 bash 解析器在当前目录之前转到上一个目录

    使用. ./filename,您告诉 bash 解析器在您当前所在的目录中导入或获取 (.) 文件名 (./filename)

    【讨论】:

      猜你喜欢
      • 2015-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 2014-06-20
      • 1970-01-01
      • 2016-06-10
      相关资源
      最近更新 更多