Gab*_*vić 11 linux bash shell-script
起初,我正在寻找which
在给它某些程序作为参数后不输出任何内容的原因,例如cd
.
从我在这里发现的情况来看,原因可能是cd
我的机器上有一个函数,通过运行type cd
.
TLDR:但是由于which
可以通过$PATH
变量定位的普通程序放置在这些$PATH
文件夹之一中,函数或脚本cd
存储在哪里?
user@linuxmchine:~$ type cd
cd is a function
cd ()
{
__zsh_like_cd cd "$@"
}
Run Code Online (Sandbox Code Playgroud)
sus*_*tus 13
通常 bash 函数永久存储在bash
启动脚本中。
/etc/profile
用于登录 shell 和/etc/bashrc
交互式 shell。~/.bash_profile
用于登录 shell 和~/.bashrc
交互式 shell。man
页面的 INVOCATION 部分找到。当 bash 启动时,用户定义的 shell 函数会在散列(或查找表)中动态加载。从 bash 源文件variable.c
中,表的定义是:
/* The list of shell functions that the user has created, or that came from
the environment. */
HASH_TABLE *shell_functions = (HASH_TABLE *)NULL;
Run Code Online (Sandbox Code Playgroud)
用户定义的函数可以用 bashdeclare
命令列出,其他 shell 仍然使用typeset
. 在 bash 中declare
已经取代了typeset
命令。
declare -f
Run Code Online (Sandbox Code Playgroud)
这些函数在 bash shell 的整个生命周期中都存在于内存中。
这些都是常见的功能,例如echo
,printf
,cd
和:
。它们被编译成一个链接到bash
可执行文件的库。与加载外部定义相比,将定义构建到可执行文件中可以节省时间。这些函数的定义(保存在.def
被解析为 C 源代码的源文件中)保存在builtins
bash 源代码的目录中。
一个有用的旁白:有关 shell 内置命令的信息,请使用help <command>
. 例如
help # list all builtins
help declare # info and options for declare
help -m declare # gives man style information for declare
Run Code Online (Sandbox Code Playgroud)
Shell函数存储在Shell的内存中(或者,可能存储在未记录的临时文件中)。他们不以任何方式使用存在,直到外壳程序启动(例如,当您登录到CLI或启动一个shell窗口等xterm
)和它们被定义(例如,通过阅读.bashrc
,.bash_profile
或类似的东西),他们不再当 shell 终止时存在。
归档时间: |
|
查看次数: |
9956 次 |
最近记录: |