history -r如果通过bind调用或在命令行中键入,则具有不同的行为

时间:2017-11-07 14:28:39

标签: bash

在函数中使用的

history -r具有不同的行为,具体取决于它是通过命令行还是使用bind调用。

使用名为hist.txt的小文件包含4行:

cat hist.txt
a
b
c
d

和一个名为foo的函数:

function foo {
  history -c && history -r ./hist.txt
}

如果我输入foo然后按UP键,我会得到填充d的缓冲区。这是对的。

如果我用bind -x '"\eW":"foo"'绑定此函数然后按ALT+W,则执行foo但结果不同:如果我按UP键我什么也得不到,如果我按下DOWN键然后我得到{ {1}}。

这是否有解释,是否有一种方法可以让这个b像所描述的第一个行为一样?

1 个答案:

答案 0 :(得分:0)

自动应答。我仍然不知道为什么历史 - 我不遵守绑定但我找到了使用循环和历史的解决方法-s:

bind -x '"\eW":"dum=$(cat hist.txt) && while read j; do history -s ${j}; done <<< $dum"'

只有历史记录-r的区别在于hist.txt文件需要以空行结束。如果不是:read将不会获得所提供示例中的最后一行(d)。