可能的重复:
使用 '。'在 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
./script
script
意思是运行当前目录下的文件。通常,运行脚本时 shell 首先调用fork()
,exec()
即脚本将在子进程(即子 shell)中运行
. ./script
类似于source ./script
这意味着在当前 shell 中运行脚本而不需要任何fork()
答案3
第一个是 shell 命令,.
后跟路径。第二个只是一条路。
shell 命令.
将随后的文件“来源”到当前 shell 会话中。因此,设置的变量./yourprogram
将在执行的会话或脚本中可见. ./yourprogram
。
另一方面,第二个命令只是请求./yourprogram
执行。这仅在具有适当的执行权限时才有效./yourprogram
,并且是
- 一个二进制文件
- 某种语言中以“shebang”行开头的脚本,例如
#!/bin/sh
或#!/usr/bin/python
- 或者它是当前 shell 语言的脚本,缺少 shebang 行,但在这种情况下当前 shell 默认在子 shell 中执行脚本文件
在这些事件中,对 shell/环境变量的更改都不会./yourprogram
在调用脚本或会话中可见。