8

该命令无需按 Enter 即可执行。这有时会很危险...

为什么会这样,我该如何预防?

4

3 回答 3

12

因为你用它粘贴换行符。它有时很有用,例如,您可以一次复制/粘贴许多命令(长的多行脚本)。

好吧,我从来没有想过要阻止这种特殊行为。这是正常的和预期的。WYPIWYG - 你粘贴的就是你得到的。

于 2009-05-13T09:47:22.480 回答
10

您正在粘贴一个或多个换行符。除了简单地不复制和粘贴换行符之外,您还可以做一些事情来解决这个问题:

  • 对于单行命令,先输入“#”,这样命令就会被注释掉。然后您可以返回并编辑它。

  • 使用 bash 的(看似鲜为人知的)编辑和执行命令功能。CTRL-x CTRL-e如果您使用 emacs 键绑定(默认)或ESC v使用 vi 键绑定,您可以点击它来调用它。这将调用包含您当前命令行的文本编辑器。然后,您可以粘贴到编辑器中,然后编辑命令。保存并退出后,编辑器保存的命令将被执行(如果要中止注释掉所有行或完全清除缓冲区)。您可以设置与FCEDITEDITOR环境变量一起使用的编辑器。

于 2009-05-13T23:24:38.807 回答
3

阻止执行的一种快速方法是键入注释字符#,然后粘贴命令。

我经常这样做,因为我在复制和抓取无关字符时手指很粗。

当您在注释字符后粘贴时,该命令位于历史缓冲区中,您可以对其进行编辑、取消注释并运行它。

---回复评论

你是对的,这仅适用于单行命令。如果剪贴板中有多行数据,则可以通过 sed 管道传输剪贴板数据。

愚蠢的 bash 技巧 #400 万和一:

prompt:$ xclip -o -selection clipboard | sed --regexp-extended 's/^(.*)$/# \1;/'

会变成这样:

for i in *.JPG;

do echo mv $i ${i/.JPG/.jpg};

done;

进入这个:

# for i in *.JPG;

# do echo mv $i ${i/.JPG/.jpg};

# done;

这真的不值得努力,但有点有趣;>

于 2009-05-13T10:44:51.810 回答