假设我在bash中使用我最喜欢的编辑器编写了一个复杂的命令。为了它,让我们说它是
for i in $(seq 1 10); do
echo $i
done
运行后我决定再次运行它。这没问题,因为我可以按UP,我会
for i in $(seq 1 10); do echo $i; done
在我的命令历史记录中。
但现在出现2个问题:
答案 0 :(得分:1)
正如评论中指出的那样,点击 Ctrl + X Ctrl + E 当显示您要编辑的命令时。
这有shell options(fc -l
的无关输出行,并且跳过命令本身的输出)。如果没有设置,多行命令将作为每行一个命令存储:
$ for i in {1..3}; do
> echo $i
> done
$ fc -l
1258 for i in {1..3}; do
1259 echo $i
1260 done
然后,有shell选项cmdhist
(来自手册的引用):
如果设置,Bash会尝试在同一历史记录条目中保存多行命令的所有行。这样可以轻松地重新编辑多行命令。
$ shopt -s cmdhist
$ for i in {1..3}; do
> echo $i
> done
$ fc -l
1263 for i in {1..3}; do echo $i; done
这是您在提问时似乎有的设置。 (您可以仅使用shopt
检查设置。)
为了保留换行符,有lithist
选项(来自手册的引用):
如果启用,并且启用了
cmdhist
选项,则多行命令将保存到包含嵌入换行符的历史记录中,而不是尽可能使用分号分隔符。
$ shopt -s lithist
$ for i in {1..3}; do
> echo $i
> done
$ fc -l
1266 for i in {1..3}; do
echo $i
done
此选项本身不会执行任何操作,但与cmdhist
结合使用,可以满足您的需求。