以bash方式重新打开以前用CTRL + X,CTRL + E编写的命令的简单方法?

时间:2016-08-07 18:17:52

标签: linux bash command-line

假设我在bash中使用我最喜欢的编辑器编写了一个复杂的命令。为了它,让我们说它是

for i in $(seq 1 10); do
  echo $i
done

运行后我决定再次运行它。这没问题,因为我可以按UP,我会

for i in $(seq 1 10); do  echo $i; done

在我的命令历史记录中。

但现在出现2个问题:

  1. 我可以在编辑器中轻松重新打开此命令,以便我可以再次重新执行该命令;
  2. 编辑器是否可以显示包含原始换行符的命令,而不是将所有内容都插入一行内容?

1 个答案:

答案 0 :(得分:1)

  1. 正如评论中指出的那样,点击 Ctrl + X Ctrl + E 当显示您要编辑的命令时。

  2. 这有shell optionsfc -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结合使用,可以满足您的需求。