当前位置: 首页 > 科技观察

使用source命令将函数和变量导入到Bash

时间:2023-03-13 14:06:45 科技观察

source中,就像Python的import或Java的include一样。学习它以扩展您的Bash能力。当您登录到Linuxshell时,您继承了一个特定的工作环境。对于shell,“环境”意味着已经为您设置了某些变量以确保您的命令按预期工作。例如,PATH环境变量定义shell查找命令的位置。没有它,您在Bash中尝试做的几乎所有事情都会失败,并出现“找不到命令”错误。在执行日常任务时,您几乎看不到环境,但它很重要。有多种方法可以影响您的shell环境。您可以更改~/.bashrc和~/.profile等配置文件,可以在启动时运行服务,还可以创建自己的自定义命令或编写自己的Bash函数。通过源添加到您的环境Bash(和其他一些shell)有一个名为source的内置命令。这就是令人困惑的地方:source执行与command相同的功能。(是的,那只是一个点),而source与Tcl命令不同(如果您键入mansource,它可能在屏幕上显示为)。事实上,内置的source命令根本不在您的PATH中。这是Bash自带的命令,想了解更多信息,可以输入helpsource。.command符合POSIX标准。但是source命令不是由POSIX定义的,但可以与.命令。根据Bashhelp,source命令在您当前的shell中执行一个文件。“inyourcurrentshell”这一行很重要,因为它意味着它不会启动子shell。因此,对source执行的任何操作都发生在内部并影响当前环境。在探索source对环境的影响之前,先使用source命令导入一个测试文件,确保其按预期执行代码。首先,创建一个简单的Bash脚本并将其保存为hello.sh:#!/usr/bin/envbashecho"helloworld"使用source,即使不设置可执行文件也可以运行该脚本:$sourcehello.shhelloworld就可以了也使用内置的.命令实现相同的结果:$.hello.shhelloworldsource和.命令成功执行测试文件的内容。设置变量和导入函数你可以使用source将文件“导入”到shell环境中,就像你可以使用include关键字引用C或C++中的库,或者使用import关键字在Python中引入模块一样.这是source最常见的用途之一,它也是.bashrc中的默认包含,通过source导入.bash_aliases以将您在登录时创建的任何自定义别名导入到您的环境中。下面是导入Bash函数的示例。首先,在名为myfunctions的文件中创建一个函数。它将打印您的公共IP地址和本地IP地址:functionmyip(){curlipaddr|grep网络$IP|\切-d"/"-f1|\grep-v127\\.0|\grep-v\:\:1|\awk'{$1=$1};1'}将此函数导入您的shell:$sourcemyfunctions测试新函数:$myip93.184.216.34inet192.168.0.23inet6fbd4:e85f:49c:2121:ce12:ef79:0e77:59d1inet10.8.42.38源代码搜索当您在Bash中使用源代码时,它会在当前目录中搜索您正在引用的文件。但并不是所有的shell都是这样,所以如果你不使用Bash,请查看文档。如果Bash找不到要执行的文件,它将搜索您的路径。同样,这不是所有shell的默认设置,因此如果您不使用Bash,请查看文档。这些都是Bash中非常方便的特性。这是非常强大的,因为它允许您将常用功能保存在磁盘上的一个集中位置,然后将您的环境视为一个集成开发环境(IDE)。您不必担心函数存储在哪里,因为您知道它们在您本地的/usr/include中,因此无论您身在何处,当您导入它们时Bash都可以找到它们。例如,你可以创建一个名为~/.local/include的目录作为常用函数存储,然后将这段代码放在你的.bashrc文件中:foriin$HOME/.local/include/*;dosource$idone这会将~/.local/include中包含自定义函数的所有文件“导入”到shell环境中。Bash是唯一在您使用源代码或.命令。Usingsourceforopensource使用source或.是一种在保持更改模块化的同时影响环境的便捷方式。下次您考虑将大量代码复制并粘贴到.bashrc文件时,请考虑将相关函数组或别名放入专用文件并使用源代码导入它们。