cd /path/to/android/root
. build/envsetup.sh
lunch 1
make
emulator
我的问题是
build/envsetup.sh
前面的点是什么意思?#1 楼
在这种情况下,点表示将文件的内容“来源”到当前的shell中。使用source
本身是shell内置命令。并且source
和点运算符是同义词。 示例
假设我在
sample.sh
文件中包含以下内容。$ cat sample.sh
echo "hi"
echo "bye?"
现在当我获取它时:
$ . sample.sh
hi
bye?
$
此类文件通常用于合并设置命令,例如将内容添加到环境变量中。
示例
说我在另一个文件
addvars.sh
中有这些命令。 $ cat addvars.sh
export VAR1="some var1 string"
export VAR2="some var2 string"
请注意,我在当前shell的环境中没有任何变量。
$ env | grep VAR
$
现在当我获得此文件时:
$ . addvars.sh
$
确定,似乎没有执行任何操作,但是当我们再次检查
env
变量时:$ env | grep VAR
VAR1=some var1 string
VAR2=some var2 string
#2 楼
要补充slm的答案,请执行以下操作:有两种运行Shell脚本的方法。一种是在单独的进程中运行脚本,这意味着在运行“子” shell进程之前,所有有关shell环境(内存状态)的信息都会还原为“父” shell的状态。
例如,当前工作目录(文件系统所在的位置)在每个进程的基础上确定。因此,让我们有一个如下所示的脚本:
#!/bin/bash
cd ~
cd ..
pwd
所以,我们将此脚本称为
foo
。让我们按以下方式运行此脚本:./foo
我们将看到以下内容:
/home
(标准免责声明中存在大量Linux和其他UNIX克隆发行版,其中有些没有将用户目录放在
/home
中。或者,就像我们以前所说的“您的里程可能会有所不同”)。现在,运行此脚本后,让我们键入以下命令
pwd
要查看我们所在的目录。我们将看到类似这样的内容:
/home/username
原因再次是,我们运行的Shell脚本具有自己的环境(包括自己的运行命令的目录),并且一旦脚本运行完毕,该环境就消失了。
现在,让我们像这样运行
foo
脚本. ./foo
或者等效地:
source ./foo
如果我们做一个之后,我们将看到以下内容:
/home
原因是:采购脚本不会调用单独的进程。就像手动键入父进程中的所有命令一样;脚本结束后将保留其环境。
让我提出一个更简单的示例。让我们编写一个如下所示的脚本:
#!/bin/bash
exit
将其命名为
pwd
。让我们确保我们可以运行它:foo
。然后,让我们这样运行它:./foo
没发生什么事。但是,另一方面,如果执行此操作:
. ./foo
或此方法:
source ./foo
我们注销。
#3 楼
句点(点)是source
中内置的bash的简写形式。它将从当前环境中的文件中读取并执行命令,并返回上一次执行的命令的退出状态。这些文件可以位于当前目录中,也可以位于PATH
中的任何位置。它不需要是可执行文件。评论
“文件可以在当前目录中,也可以在PATH中的任何位置”。无论文件在整个文件系统中的何处,都可以为文件提供嗡嗡声,您只需提供它的完整路径即可。
–Â Atralb
20年4月12日在11:21
#4 楼
TL; DR点与源命令相同。
source是Unix命令,它对命令后的文件进行评估,作为命令列表,在以下位置执行当前上下文。
摘录自
https://en.wikipedia.org/wiki/Source_(command)
评论
欢迎来到U&L!该答案重复了已被接受的答案中的信息,并且实际上没有添加任何内容。
– JigglyNaga
18/12/13在17:06
方面,尽管从技术上讲Jiggly是正确的-这个答案简洁明了,可以帮助我更轻松地理解
– StayCool
20年7月9日在15:46
JigglyNagga欢迎使用TL; DR的含义。简洁也是信息的重要组成部分。这是对我有帮助的信息,这就是我发布该信息以帮助人们寻找更简洁答案的原因。像我以前一样
– mochomecha
20年7月13日在23:05
#5 楼
如何查找。# type .
. is a shell builtin
# help .
.: . filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
评论
我认为手册中缺少逗号。它应显示为“在当前Shell中从文件执行命令。”
–ctrl-alt-delor
19年1月2日,11:33
#6 楼
。 (源或点运算符)从当前Shell上下文中的filename参数读取并执行命令。
Syntax
. filename [arguments]
source filename [arguments]
source是点/句号的同义词' 。”在bash中使用,但在POSIX sh中不使用,因此为了获得最大的兼容性,请使用句点。
使用源运行脚本时,该脚本在现有的Shell中运行,该脚本创建或修改的任何变量将保持可用脚本完成后。相反,如果脚本仅以文件名的形式运行,则将生成一个单独的子shell(具有一组完全独立的变量)来运行该脚本。
通过运行.ss64script(点ss64script)和执行脚本来执行脚本之间存在细微的差别。 ss64script(点空间ss64script)
第一个运行的是被'ls'命令隐藏的文件,(尽管ls -a将显示隐藏的文件)第二个选项将执行ss64script,即使它具有尚未使用chmod设置为可执行文件。
源
评论
您的回答比接受的要好,我理解您的解释,谢谢!
–艾哈迈德(Ahmed)
16年7月25日在13:03
邓达达杜乌恩! (请打鼓)……这里最重要的短语是!:原因是:采购脚本并没有调用单独的过程。就像手动键入父进程中的所有命令一样;脚本结束后,将保留其环境。
–加百利·斯台普斯
19-10-25在2:36
您应该以第二个示例为准。它包含更多的冲击力。
–单线程
19-10-29在14:11