2012-06-21 27 views
3

首先,我想纠正我的词汇量。我假设终端为bash提供了一个环境,它是shell的一个类型/版本。它是否正确?保存bash函数

我试图在开发过程中更多地使用bash和shell来加速部署。但是,我只是开始理解我从成长中学到的命令之外的基础知识。

我已经开始在终端中制作功能来帮助自动执行一些更重复的任务。直到我退出终端,这都是寻找和花花公子。

我假设shell运行在一个实例中,以便当我退出终端时实例丢失。我注意到shell离开了一个.bash_history,也可以使用'history'访问,在那里我可以看到旧会话中的旧函数。但是,当然,他们似乎不再执行。

我认识到我可以创建一个shell脚本,但是这会引入编译问题以及不得不更多地关注脚本相对存储的位置。

问题:当我使用command(){}创建bash脚本时,它们在关闭终端后不会保留。我可以让他们在新的终端会话中这样做,我可以访问我的旧功能而不诉诸shell脚本?


编辑:我也想提一提,我想广泛地发现一个问题这个用传统的手段,但“拯救”,并在搜索术语“退出”往往会直接到外壳的其他方面。

+0

不完全。 “终端”是将屏幕输出的文本转换为屏幕上的像素,并将键盘按压转换为进入外壳的文本的程序。这个问题全是关于shell,而不是终端。我会适当地保留它。 – LeoNerd

回答

1

您的第一条陈述是正确的。终端实例运行一种类型的shell(bash,sh,csh)

您可以将它们添加到〜/ .bashrc文件或将保存的脚本路径(无需编译)添加到PATH变量中。

您也可以将脚本复制到/ usr/local/bin以便随时快速访问。你不需要跟踪他们相对的位置。这是非常方便的,并使您的脚本可供其他用户使用(或者,如果权限设置正确,则不会)

2

查看Bash参考手册的Using History Interactively部分,了解如何从历史记录中执行命令。

例如,输入!?foo并按输入将执行包含“foo”的最新命令。我喜欢在我的~/.bashrc中有shopt -s histverify histreedit,这样我可以编辑并确认该命令,如有必要,而不是立即执行。

另请参阅Commands For Manipulating The History部分的击键,您可以使用该按键搜索历史条目以进行调用和执行。

例如,按下Ctrl键 - - [R并键入foo会记得含有 “foo” 的最近的命令。您可以按Ctrl - r附加时间继续搜索相反的附加匹配命令。按输入当您准备执行当前显示的或Ctrl - g中止搜索。

如果添加stty -ixon~/.bashrc,那么你可以使用Ctrl键 - 小号你已经开始向后搜索后,通过历史向前搜索。

当然,您可以通过编辑~/.bashrc并添加它们来保存您的功能。我更喜欢将我的函数保存在我创建的名为~/bin/functions的文件中,然后添加一行到~/.bashrc以获取该文件。该行看起来像. ~/bin/functions

我在/usr/local/bin~/bin中保存较大的脚本。前者应该已经在你的路径中,你可以通过编辑~/.bashrc将后者添加到你的路径。

1

在命令行中输入函数后,您可以使用命令行编辑来回忆它们(如@Dennis Williamson所述),但有一种更简单的方法:declare -f。此命令可以列出当前所有的功能,你可以将它们重定向到一个文件:

home/user1> function myfunc { 
> echo "Hollow world!" 
> } 

/home/user1> declare -f > myfuncs 
/home/user1> more myfuncs 
myfunc() 
{ 
    echo "Hollow world" 
} 

注猛砸如何改变从科恩函数语法壳Bourne shell的!幸运的是,Bash中的两者没有区别(与ksh93不同)。

当你需要加载功能,这是一个简单的问题:

/home/user1> source myfuncs 
/home/user1> myfunc 
Hollow world! 

你不需要的方式执行权限,只读。 您可以(如其他人所说)将其添加到您的一个启动文件中,如.bashrc