我计划创建一个可以简化我工作的函数。该功能将类似于
function lazymode()
{
echo "Hello World!";
}
这样当我lazymode
在shell中使用命令时,它会输出Hello World!
。
我应该将用户定义的函数放在哪个文件中?
我计划创建一个可以简化我工作的函数。该功能将类似于
function lazymode()
{
echo "Hello World!";
}
这样当我lazymode
在shell中使用命令时,它会输出Hello World!
。
我应该将用户定义的函数放在哪个文件中?
Answers:
取决于功能。如果这只是一个非常简单的单行代码,则可以创建别名或将函数粘贴在其中~/.bashrc
(bash在启动时加载的文件)。
如果您要创建更多内容,那么创建自己的可执行脚本可能会更有意义,该脚本在~/bin/
默认情况下将不存在(它只是一个目录),但应位于您的路径中。请记住,为此文件将需要是可执行文件(chmod +x filename
),并以适当的#!/bin/bash
节开头。
第二种途径有一些明显的好处:
~/bin/
可以在该外壳程序的路径中使用(在大多数情况下,应为AFAIK)。/usr/local/bin
混乱中$PATH
吗?
~/.bashrc
(尽管它是source
d)的一个小但值得一提的优点是Bash在执行PATH查找之前先查找函数。
最好的选择是~/.bashrc
文件。
你要么可以直接写你的shell函数定义在你的~/.bashrc
文件,或者,如果你有很多人,不想弄乱你的~/.bashrc
文件,你可以把它们都在你选择的其他文件-只是一定要源说文件中的~/.bashrc
文件。例如,如果具有函数的文件名为bash_functions
,只需在~/.bashrc
文件中添加以下行:
if [[ -f /path/to/bash_functions ]]; then
source /path/to/bash_functions
fi
或等效地:
if [[ -f /path/to/bash_functions ]]; then
. /path/to/bash_functions
fi
其中.
只是的符号表示source
。在if
确保测试使文件/path/to/bash_functions
试图源之前存在。
此技术与~/.bashrc
通过创建一个名为的文件~/.bash_aliases
并使用与上述语法类似的语法~/.bashrc
来测试其存在并随后提供源的方式建立别名非常相似。
~/.profile
该文件由命令解释器针对登录Shell执行。当您使用GUI并打开终端时,不会执行该文件,因为您将处于未登录外壳中。
这是声明永久功能的基本程序:
~/.bashrc
在文本编辑器中打开文件。不管哪个文本编辑器都没有关系,只要您知道如何使用它,只要打开/home/<username>/.bashrc
在~/.bashrc
声明自己的函数的末尾,例如:
find_dirs(){
find "$1" -type d
}
保存并关闭文件。
~/.bashrc
每次您打开交互式外壳程序(即新的终端选项卡,通过进行登录ssh
或打开TTY1或其他虚拟控制台)时,都会读取该文件。这在脚本文件中将不可用,因为~/.bashrc
非交互式外壳程序不会读取该文件。如果bash
使用--norc
option 运行,它也不可用。
如果希望该功能在当前打开的选项卡中立即可用,请使用source ~/.bashrc
命令。
函数像常规命令一样接受参数。例如,$1
通过$9
在调用函数时指示位置参数。在上面的示例中,find_dirs
仅采用一个位置参数,并将其称为find_dirs /etc
。您也可以使用$@
来引用所有位置参数。函数也接受重定向。您可以使用调用函数find_dirs $1 > /dev/null
;我们也可以声明如下:
find_dirs(){
find "$1" -type d
}
注意man bash
:“函数是在当前shell的上下文中执行的;不会创建新的过程来解释它们”。这意味着您还应该意识到能够更改Shell执行环境的功能-更改变量和终端设置。