zip*_*zap 13 command-line executable
我需要澄清一下我们在终端下运行可执行文件的方式。这可能是一个蹩脚的问题,但是使用./an_executable
和运行可执行文件有什么区别. an_executable
(假设我们在 an_executable 所在的目录中)
我已经知道前者让 shell 在当前目录 ( .
) 中查找 an_executable ,但是为什么在使用后一个版本/
后不需要 a.
呢?
提前致谢。
roa*_*dmr 22
该. executable
语法不适用于任何可执行文件(或者是吗?)。相反,它是source
内置bash 的别名。所以差异主要与 bash 脚本有关,事实是它们是完全不同的东西:)
./executable
要求“正常”运行可执行文件。./
是对当前路径的相对引用。这避免了 shell (bash) 尝试在其目录中定位可执行文件$PATH
(如果您根本没有使用命令指定路径,则会这样做)。你不能只做的原因executable
之一是安全;假设您解压缩下载的存档,其中包含恶意版本的ls
. 如果它直接从您当前的目录运行,您将在不知不觉中运行该版本。
另一方面,. executable
是说“源一个名为executable
”的文件。由于您直接命名文件并且它实际上不必是可执行文件,因此 $PATH 的安全限制不适用。采购只会“运行”(或似乎运行)shell 脚本。它的作用是:
source filename [arguments]
Read and execute commands from filename in the current shell
environment and return the exit status of the last command exe?
cuted from filename.
Run Code Online (Sandbox Code Playgroud)
那么......执行和采购之间的真正区别是什么?假设相同的 shell 脚本,执行它 ( ./script
) 将产生一个新的 shell,在该 shell 中运行脚本,当脚本退出时,关闭该 shell 并返回到父 shell。实际上,它将启动一个新bash
进程来执行脚本)。
( . script
) 将导致当前shell 从文件中读取命令,就好像它们是在命令行中键入的一样。没有产生新的外壳。
查看其行为的一种非常简单的方法是编写一个仅包含exit
. 如果您使用./script
它,似乎什么都不会发生,这是因为启动了一个新的 shell 进程,该exit
命令退出了那个新的shell,并且您当前的 shell 不受影响。
如果你. script
,你当前的终端将关闭,因为该exit
命令在当前的 shell 中运行。所以它相当于exit
在命令提示符下键入。
归档时间: |
|
查看次数: |
1232 次 |
最近记录: |