我计划创建一个可以简化我工作的函数。该功能将类似于
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(尽管它是sourced)的一个小但值得一提的优点是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使用--norcoption 运行,它也不可用。
如果希望该功能在当前打开的选项卡中立即可用,请使用source ~/.bashrc命令。
函数像常规命令一样接受参数。例如,$1通过$9在调用函数时指示位置参数。在上面的示例中,find_dirs仅采用一个位置参数,并将其称为find_dirs /etc。您也可以使用$@来引用所有位置参数。函数也接受重定向。您可以使用调用函数find_dirs $1 > /dev/null;我们也可以声明如下:
find_dirs(){
find "$1" -type d
}
注意man bash:“函数是在当前shell的上下文中执行的;不会创建新的过程来解释它们”。这意味着您还应该意识到能够更改Shell执行环境的功能-更改变量和终端设置。