2

当我使用命令行时,我可以使用 CP 或向上箭头来调用历史记录。但是,当尝试调用此处文档的输入时,这不起作用。

# cat <<!
> a
> b
> c
> !
a
b
c
# cat <<! # C-p to get here, expected to see ! as last input. C-c to break out
# history 2
2053  cat <<!
2054  history 2

我正在使用 rxvt。

PS 此功能在使用时可以正常shell工作emacs

4

2 回答 2

2
shopt -s cmdhist

cat <<!
a
b
c
!

history | tail ...
8580  cat <<!
a
b
c
!

cmdhist shell 选项如果启用)会导致 shell 尝试将多行命令的每一行保存在同一历史条目中,并在必要时添加分号以保持语法正确性。

lithist shell 选项使 shell 使用嵌入的换行符而不是分号来保存命令

来自 man bash

于 2011-12-04T14:15:49.217 回答
2

我也有同样的问题。Bash 3.2.49(1)-发布

psql <<EOF
SELECT * FROM blah;
EOF

我的历史只保留第一行。我已经设置了cmdhist(和lithist),它们适用于其他多行命令,但不适用于 heredocs。悲惨。

一种解决方法是:

echo "
SELECT *
FROM blah
" | psql
于 2013-08-08T12:59:38.217 回答