在哪里可以放置用户定义的 shell 函数?

Abe*_*ejo 15 command-line bash functions

我打算创建一个可以为我简化事情的函数。该功能将类似于

function lazymode()
{
echo "Hello World!";
}
Run Code Online (Sandbox Code Playgroud)

这样当我lazymodeshell 中使用命令时,它会输出Hello World!.

我应该把用户定义的函数放在什么文件中?

Oli*_*Oli 15

取决于功能。如果它只是一个像这样的超级简单的单行代码,您可以创建一个别名或将函数粘贴在其中~/.bashrc(bash 启动时加载的文件)。

如果您正在创建更丰富的内容,那么创建自己的可执行脚本可能更有意义,该脚本~/bin/默认情况下不存在(它只是一个目录)但应该在您的路径中。请记住,该文件需要是可执行的 ( chmod +x filename) 并以适当的#!/bin/bash节开始。

第二条路线有一些明显的好处:

  • 更容易查看可用内容
  • 语法错误不会破坏您的个人资料
  • 如果您更改脚本,则无需继续重新采购 bash 配置
  • 只要使用完整路径或~/bin/也在该 shell 的路径中(在大多数情况下应该是 AFAIK),它就可用于任何 shell。


Rad*_*anu 6

最好的选择是~/.bashrc文件。

你要么可以直接写你的shell函数定义在你的~/.bashrc文件,或者,如果你有很多人,不想弄乱你的~/.bashrc文件,你可以把它们都在你选择的其他文件-只是一定要源文件中的~/.bashrc文件。例如,如果包含您的函数的文件名为bash_functions,只需在您的~/.bashrc文件中添加以下行:

if [[ -f /path/to/bash_functions ]]; then
    source /path/to/bash_functions
fi
Run Code Online (Sandbox Code Playgroud)

或者,等效地:

if [[ -f /path/to/bash_functions ]]; then
    . /path/to/bash_functions
fi
Run Code Online (Sandbox Code Playgroud)

其中.只是 的符号表示source。在尝试获取if文件/path/to/bash_functions之前,该测试确保该文件存在。

这种技术非常类似于~/.bashrc通过创建一个名为in的文件~/.bash_aliases并使用与上述 in 类似的语法~/.bashrc来测试它的存在然后获取它来建立别名。

  • `~/.profile` 文件由登录 shell 的命令解释器执行。当您使用 GUI 并打开终端时,不会执行该文件,因为您将处于未登录的 shell 中。 (2认同)