如何在 bash 中删除刚刚输入的换行符?

如何在 bash 中删除刚刚输入的换行符?

我有时会将路径复制粘贴到终端中,并且经常会不小心复制换行符。例如,我想查找然后读取 的内容foobar.txt

$ locate foobar.txt
/home/sparhawk/Document Directory/foobar.txt

然后我单击三次选择第二行。(哎呀,它还选择了末尾的换行符!)由于路径中有空格,我需要用引号将路径括起来。因此输入

$ cat '

并单击鼠标中键进行粘贴。这将产生

$ cat '/home/sparhawk/Document Directory/foobar.txt
> 

因为我在关闭之前插入了一个换行符'。此时,我无法按退格键删除换行符。有没有办法删除刚刚输入的换行符?

更多信息

此时我可以SIGINT使用Ctrl+ c,也可以使用另一个 来完成引用'。假设我选择后者。

$ cat '/home/sparhawk/Document Directory/foobar.txt
> '
cat: /home/sparhawk/Document Directory/foobar.txt
: No such file or directory

这是有道理的,因为我刚刚输入了一个带有换行符的路径。但是,此时,我可以按向上箭头来加载最后一个命令。即

$ cat '/home/sparhawk/Document Directory/foobar.txt
'

此时,我>按两次退格键删除换行符。(注意:第二个历史记录示例中没有。)

答案1

Bash 用途GNU Readline 库用于命令行输入和编辑。不幸的是,这个库只能逐行处理输入。readline()按 完成该行后,调用将返回Enter。下一行(显示$PS2>”提示符后)将通过单独的readline()调用进行处理。

当您在编辑历史记录中返回到多行输入时,Readline 会将输入视为带有换行符的单个“行”($PS2不显示提示),因此您可以按照描述编辑整个多行输入。

我使用以下技巧来解决您提出的问题:当我输入了不需要的换行符时,我会按Ctrl+取消它。然后我按(或+ )c返回到取消的输入。然后我可以通过删除换行符并进行其他编辑。CtrlpBackspace

输入末尾带有不需要的换行符,按Ctrl+ c

$ cat 'xyz
> ^C

按下输入后返回事件,不带尾随换行符:

$ cat 'xyz

相关内容