./script 和 ./script 之间有什么区别? 。/脚本?

./script 和 ./script 之间有什么区别? 。/脚本?

可能的重复:
使用 '。'在 bash 中执行文件

我试图弄清楚如何通过脚本导出我的环境而不是更改我的 .bashrc 文件。

我发现这个旧的有用的帖子那说:

变量只能导出到从属进程,不能将它们传递回父进程。如果您确实希望脚本影响父 shell 的环境,请运行该脚本

. ./yourprogram

. ./script我只是想知道和之间有什么区别./script

当我看到它时,他们对我意味着,从当前目录运行脚本?

答案1

./script在该位置运行一个名为“脚本”的文件./- 翻译为“此处”(即当前目录)。该脚本在子 shell 中执行,当子 shell 结束时,脚本对环境所做的任何操作都会丢失。

. ./script./告诉当前 shell在以下位置执行一个名为“script”的文件当前的shell 没有子 shell,因此当脚本停止时,环境中发生的任何更改都会保留。

.是命令的简写source。您可以使用 man ( ) 查找源代码man source

/home/bob/script./script就好像你在目录中一样/home/bob

. /home/bob/script. ./script就好像你在目录中一样/home/bob

答案2

./scriptscript意思是运行当前目录下的文件。通常,运行脚本时 shell 首先调用fork()exec()即脚本将在子进程(即子 shell)中运行

. ./script类似于source ./script这意味着在当前 shell 中运行脚本而不需要任何fork()

答案3

第一个是 shell 命令,.后跟路径。第二个只是一条路。

shell 命令.将随后的文件“来源”到当前 shell 会话中。因此,设置的变量./yourprogram将在执行的会话或脚本中可见. ./yourprogram

另一方面,第二个命令只是请求./yourprogram执行。这仅在具有适当的执行权限时才有效./yourprogram,并且是

  1. 一个二进制文件
  2. 某种语言中以“shebang”行开头的脚本,例如#!/bin/sh#!/usr/bin/python
  3. 或者它是当前 shell 语言的脚本,缺少 shebang 行,但在这种情况下当前 shell 默认在子 shell 中执行脚本文件

在这些事件中,对 shell/环境变量的更改都不会./yourprogram在调用脚本或会话中可见。

相关内容