Linux 如何将函数/别名定义写入Bash历史记录?

Linux 如何将函数/别名定义写入Bash历史记录?,linux,bash,unix,Linux,Bash,Unix,假设我有一个函数: lsm(){ ls ~/music } 然后,假设我运行了它: lsm 之后,如果我按下“向上”键,那么我将看到lsm:我运行的最后一个命令 但是,我的目标是让Bash历史记录编写完整的、扩展的函数/别名定义 因此,如果我按下“向上”,我将在前面只键入lsm之后,在Bash历史记录中看到ls~/music。@Cyrus有一个实用的建议: 使用history-s some string将some string写入历史记录 (来源:)这个函数运行了几十行怎么样。那么历

假设我有一个函数:

lsm(){
    ls ~/music
}
然后,假设我运行了它:

lsm
之后,如果我按下“向上”键,那么我将看到
lsm
:我运行的最后一个命令

但是,我的目标是让Bash历史记录编写完整的、扩展的函数/别名定义


因此,如果我按下“向上”,我将在前面只键入
lsm
之后,在Bash历史记录中看到
ls~/music

@Cyrus有一个实用的建议:

使用
history-s some string
some string
写入历史记录


(来源:)

这个函数运行了几十行怎么样。那么历史有什么意义吗?将
history-s'ls~/music'
添加到您的函数中?@EdHeal,是的,我不介意。但是,Bash倾向于在我运行它之后将多行代码转换为单行代码(例如,.\n转换为;),因此可能也是这样。与此相关的有两个设置:
shopt-s cmdhist
将多行命令保存为单个历史记录条目,
shopt-s lithist
保留换行符。至于在保存到历史中之前进行扩展,我认为这是不可能的。@EdHeal如果您有一个三行sed或awk命令,并且希望将其作为一个整体进行编辑,那么它会很有用;或者有时候,我在一个交互式会话中跨多行编写小循环,如果出现打字错误或类似错误,那么将它们作为一个历史记录条目就很方便了。非常好,你知道我如何在终端窗口中手动输入的每个命令都运行这个循环吗?至少对于.bashrcIt中的函数或别名,我意识到这不是一个非常自动的解决方案,但您可以将所需的命令添加到函数定义中。
history

-s
    The *args* are added to the end of the history list as a single entry.