为什么有时当我在bash提示符上粘贴命令时,即使我没有按Enter键也会执行它?

时间:2009-05-13 09:42:07

标签: bash copy-paste

执行命令而无需按Enter键。 这有时会很危险......

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

3 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:9)

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

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

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

答案 2 :(得分: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;

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