我在使用长参数的文件夹中有一个脚本。我有没有可能拥有在该特定目录中执行的命令的历史记录,而不必回顾整个历史记录?
history | less
也许?它并不能真正回答您的问题,但这就是我要开始的地方。
我在使用长参数的文件夹中有一个脚本。我有没有可能拥有在该特定目录中执行的命令的历史记录,而不必回顾整个历史记录?
history | less
也许?它并不能真正回答您的问题,但这就是我要开始的地方。
Answers:
通过连接到bash的PROMPT_COMMAND,此函数在每次收到新提示时都将运行,因此现在是检查您是否要在其中创建自定义历史记录的目录中的好时机。该功能有四个主要分支:
$PWD
)没有更改,则什么也不做(返回)。如果PWD 已更改,则我们将设置一个本地函数,其唯一目的是将“自定义目录”代码分解为一个地方。您将要用自己的测试目录替换我的测试目录(以分隔|
)。
由于我们已经更改了目录,因此请更新“上一个目录”变量,然后将内存中的历史记录保存到HISTFILE中,然后清除内存中的历史记录。
如果我们已更改为自定义目录,则将HISTFILE设置.bash_history
为当前目录中的文件。
否则,我们已更改为自定义目录,因此将HISTFILE重置为原始目录。
最后,由于我们更改了历史记录文件,因此请回读以前的历史记录。
为了使事情顺利进行,该脚本设置了PROMPT_COMMAND值并保存了两个内部使用的变量(库存HISTFILE和“先前目录”)。
prompt_command() {
# if PWD has not changed, just return
[[ $PWD == $_cust_hist_opwd ]] && return
function iscustom {
# returns 'true' if the passed argument is a custom-history directory
case "$1" in
( */tmp/faber/somedir | */tmp/faber/someotherdir ) return 0;;
( * ) return 1;;
esac
}
# PWD changed, but it's not to or from a custom-history directory,
# so update opwd and return
if ! iscustom "$PWD" && ! iscustom "$_cust_hist_opwd"
then
_cust_hist_opwd=$PWD
return
fi
# we've changed directories to and/or from a custom-history directory
# save the new PWD
_cust_hist_opwd=$PWD
# save and then clear the old history
history -a
history -c
# if we've changed into or out of a custom directory, set or reset HISTFILE appropriately
if iscustom "$PWD"
then
HISTFILE=$PWD/.bash_history
else
HISTFILE=$_cust_hist_stock_histfile
fi
# pull back in the previous history
history -r
}
PROMPT_COMMAND='prompt_command'
_cust_hist_stock_histfile=$HISTFILE
_cust_hist_opwd=$PWD
如果您只需要单个目录的历史记录,Jeff的答案很好,但是如果您确定安装zsh可以,则可以使用per-history-directory获取特定于所有目录的目录的历史记录。
您可以通过以下方式安装zsh:
brew install zsh
另外,如果你想安装哦,我-zsh中,您可以添加在histdb插件并编写自定义查询,查询的SQLite数据库是histdb在增加。我写了那篇关于并且在添加自动完成功能开发日记后。检查奖励命令部分。
查询看起来像这样
show_local_history() {
limit="${1:-10}"
local query="
select history.start_time, commands.argv
from history left join commands on history.command_id = commands.rowid
left join places on history.place_id = places.rowid
where places.dir LIKE '$(sql_escape $PWD)%'
order by history.start_time desc
limit $limit
"
results=$(_histdb_query "$query")
echo "$results"
}
这也接受一个可选的限制:
show_local_history 50
例如。
当我需要多次使用带有长参数的命令时,通常会在自己的别名中创建一个别名,~/.bash_aliases
也可以根据需要将其放入您的别名中~/.bashrc
。这很容易,可以节省时间,而无需在历史记录中查找旧命令。