首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >./executable和./executable之间的区别。可执行文件

./executable和./executable之间的区别。可执行文件
EN

Stack Overflow用户
提问于 2013-01-31 20:15:20
回答 3查看 307关注 0票数 4

在shell中,它们之间的区别是什么?

代码语言:javascript
复制
. executable

代码语言:javascript
复制
./executable

在第一个例子中,圆点是source的快捷方式,对吗?那么./executablesource executable之间有什么区别吗

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-31 20:42:08

./executable和源可执行文件之间有区别吗?

最基本的区别是,

代码语言:javascript
复制
./foo.sh      - foo.sh will be executed in a sub-shell
source foo.sh - foo.sh will be executed in current shell

一些例子可以帮助解释其中的差异:

假设我们有foo.sh

代码语言:javascript
复制
#!/bin/bash
VAR=100

来源:

代码语言:javascript
复制
$ source foo.sh 
$ echo $VAR
100

如果您:

代码语言:javascript
复制
./foo.sh
$ echo $VAR
[empty]

另一个例子是bar.sh

代码语言:javascript
复制
#!/bin/bash
echo "hello!"
exit 0

如果你像这样执行它:

代码语言:javascript
复制
$ ./bar.sh
hello
$

但是如果你使用它的来源:

代码语言:javascript
复制
$ source bar.sh
<your terminal exits, because it was executed with current shell>
票数 0
EN

Stack Overflow用户

发布于 2013-01-31 20:28:07

./executable运行位于当前工作目录中的可执行文件。(如果您的$PATH中没有.,那么使用executable是不够的,通常情况下也没有)。在这种情况下,executable可以是elf二进制文件,也可以是以#!/some/interpreter开头的脚本,也可以是任何可以exec的东西(在Linux上,由于有了binfmt模块,它可能就是一切)。

无论是否具有执行权限,. executable都会将一个shell脚本添加到当前shell中。不会创建任何新进程。在bash中,根据$PATH变量搜索脚本。脚本可以设置环境变量,这些变量将保留在shell中,还可以定义函数和别名等。

票数 7
EN

Stack Overflow用户

发布于 2013-01-31 20:20:33

在第二个文件中,您提供了路径:./是当前工作目录,因此它不会在PATH中搜索可执行文件,而是在当前目录中搜索。

source将可执行文件作为参数,并在当前进程中执行它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14625580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档