我有很长的管道命令链,我想在多行上格式化(并使用" fc&#34进行进一步编辑;)
如何记住bash历史记录是否记得为格式化添加了新的换行符?
例如,如果我输入:
$ echo a b c \
> | grep a
a b c
历史记录回忆起已删除的新线:
$ echo a b c | grep a
我知道我可以使用shopt -s lithist
来显示未转义的新行:
例如,运行后:
$ shopt -s lithist
以下命令:
$ for X in a b c; do
> echo $X
> done
a
b
c
被召回为:
$ for X in a b c; do
echo $X
done
但是这并不保留转义换行符的格式(格式化管道链所需的格式)。
答案 0 :(得分:1)
我不认为你想要什么是完全可能的。 bash手册页说明:
If a \<newline> pair appears, and the backslash is not
itself quoted, the \<newline> is treated as a line continuation (that
is, it is removed from the input stream and effectively ignored).
使用lithist
shell选项,只需重新格式化代码即可解决此问题。所以不要这样:
$ echo a b c \
> | grep a
a b c
这样做:
$ echo a b c |
> grep a
你实际上并不需要将放在行的末尾 - 如果你可以显示bash表示输入是预期的,那么它无论如何都会等待下一行。 (您可能已经知道这一点,但是)这也适用于多行输入:
$ echo 'one
> two
> three'
one
two
three
编辑:以回应下面通过评论提出的问题,了解如何在不同的行上传递多个命令行选项。
我能想到的唯一方法是预先在数组中定义选项,然后将其作为命令行参数传递。例如:
$ opts=(
> -s 'test'
> someone@example.com
> )
$ mutt ${opts[*]} # launches: mutt -s someone@example.com