bash 函数内部变量
登录Linux Shell时,您将继承特定的工作环境。 的环境中 ,在壳的背景下,这意味着有已经被设置为你的变量,从而确保你的命令工作按预期。 例如, PATH环境变量定义外壳程序在哪里查找命令。 没有它,几乎您尝试在Bash中执行的所有操作都会因未找到命令错误而失败。 在执行日常任务时,您的环境对您几乎是不可见的,但至关重要。
有多种方法可以影响您的Shell环境。 您可以在~/.bashrc
和~/.profile
等配置文件中进行修改,可以在启动时运行服务,还可以创建自己的自定义命令或为自己的Bash函数编写脚本。
通过源添加到您的环境
Bash(以及其他一些shell)具有一个称为source
的内置命令。 这就是令人困惑的地方: source
执行与command相同的功能.
(是的,这可是一个点),这是不一样source
作为Tcl
命令(其中可能出现在屏幕上,如果你输入man source
)。 实际上,内置的source
命令根本不在您的PATH
中。 这是Bash的一部分附带的命令,要获取有关它的更多信息,可以键入help source
。
的.
该命令符合POSIX 。 source
命令不是POSIX定义的,但可以与互换.
命令。
help
, source
命令在您当前的shell中执行一个文件。
“在您当前的外壳程序中”子句很重要,因为它表示它不会启动子外壳程序。
因此,使用source
执行的任何操作都发生在内部,并影响您当前的环境。
在研究source
如何影响您的环境之前,请在测试文件上尝试使用source
,以确保其按预期执行代码。 首先,创建一个简单的Bash脚本并将其保存为名为hello.sh
的文件:
#!/usr/bin/env bash
echo
"hello world"
使用source
,即使不设置可执行位也可以运行此脚本:
$
source hello.sh
hello world
您也可以使用内置的.
命令以得到相同的结果:
$ . hello.sh
hello world
source
和.
命令成功执行测试文件的内容。
设置变量和导入功能
您可以使用source
将文件“导入”到您的Shell环境中,就像您可以使用C或C ++中的include
关键字引用一个库或使用Python中的import
关键字引入一个模块一样。 这是最常见的用途之一source
,这是一个常见的默认列入.bashrc
文件, source
文件名为.bash_aliases
让你定义的任何自定义别名,当您登录得到导入到您的环境。
这是导入Bash函数的示例。 首先,在名为myfunctions
的文件中创建一个函数。 这将打印您的公共IP地址和您的本地IP地址:
function myip
(
)
{
curl http:
// icanhazip.com
ip addr
|
grep inet
$IP
| \
cut
-d
"/"
-f
1
| \
grep
-v
127 \.0
| \
grep
-v \:\:
1
| \
awk
'{$1=$1};1'
}
将函数导入您的shell:
$ source myfunctions
测试新功能:
$ myip
93.184.216.34
inet 192.168.0.23
inet6 fbd4:e85f:49c:
2121 :ce12:ef79:0e77:59d1
inet 10.8.42.38
搜索源
在Bash中使用source
时,它将在当前目录中搜索您引用的文件。 并非在所有Shell中都发生这种情况,因此,如果您不使用Bash,请查看文档。
如果Bash找不到要执行的文件,它将搜索您的PATH
。 同样,这并不是所有shell的默认设置,因此,如果您不使用Bash,请查看文档。
这些都是Bash中不错的便利功能。 此行为出奇的强大,因为它使您可以将常用功能存储在驱动器上的集中位置,然后将您的环境视为集成开发环境(IDE)。 您不必担心函数的存储位置,因为您知道它们在/usr/include
本地等效目录中,因此无论您在何处获取它们,Bash都可以找到它们。
例如,您可以创建一个名为~/.local/include
的目录作为常见功能的存储区,然后将此代码块放入您的.bashrc
文件中:
for i
in
$HOME
/ .local
/ include
/* ;
do
source
$i
done
这~/.local/include
中的自定义函数的任何文件“导入”到您的shell环境中。
当您使用source
或时,Bash是唯一同时搜索当前目录和PATH
shell .
命令。
使用源代码开源
使用source
或.
执行文件可以是一种方便的方式,可以在保持更改模块化的同时影响环境。 下次考虑将大代码块复制并粘贴到.bashrc
文件中时,请考虑将相关功能或别名组放入专用文件中,然后使用source
提取它们。
翻译自: https://opensource.com/article/20/6/bash-source-command
bash 函数内部变量