我一直将文件名/ etc粘贴到终端中,有时剪贴板的内容不是我所期望的。
通常结果是将数百行文本(例如,源代码)粘贴到命令提示符中,触发上帝只知道什么东西令人讨厌。
有什么方法可以防止bash盲目执行我粘贴的内容吗?我希望它只是粘贴文本,然后让我决定是否要执行它。
我一直将文件名/ etc粘贴到终端中,有时剪贴板的内容不是我所期望的。
通常结果是将数百行文本(例如,源代码)粘贴到命令提示符中,触发上帝只知道什么东西令人讨厌。
有什么方法可以防止bash盲目执行我粘贴的内容吗?我希望它只是粘贴文本,然后让我决定是否要执行它。
Answers:
最简单的解决方案可能是使用文本编辑器作为缓冲区,您可以在其中仔细检查内容,然后从文本编辑器复制到终端。如果为此使用TextEdit,则可能需要确保它处于纯文本模式(“ 格式”菜单→“ 制作纯文本”;⇧⌘T),以避免诸如将链接粘贴为链接而不是URL之类的问题。
还要注意的另一件事是,Bash会尝试执行换行符之前的所有内容,因此,如果要复制文本块,则可能要确保选择停止在最后一个字符之后,而不是包括换行符的结尾。线。
你要这个:
不是这个:
当然,如果您要在文本中复制带有换行符的内容(即多个段落),则需要手动编辑选择内容。
括号粘贴是一项功能,终端会告诉外壳程序您粘贴了某些内容,而不仅仅是键入内容,因此,只有按Enter键,外壳程序才能运行命令。
Terminal.app支持此功能,但并非所有终端都支持。
同样,并非所有的shell都支持它。OS X随附的bash版本不支持带括号的粘贴(在撰写本文时为v3.2.57)。
但是,zsh支持括号内的粘贴:
Zsh与bash大部分兼容(除非您使用某种真正晦涩的功能,否则即使脚本也可能会起作用),并且在许多方面都更好-例如,它甚至具有多行命令编辑功能!
您可以将这个小Bash脚本放在您的位置PATH
:
#!/bin/bash
read -p "Are you sure you wish to execute \`$(pbpaste)\`? (Y/n) "
[[ $REPLY =~ ^[Yy]?$ ]] && pbpaste | bash
/usr/local/pbexecute
例如,如果将这些内容放入并使其可执行,则可以pbexecute
从命令行安全地执行,这将在执行剪贴板的内容之前提示我确认。
一种替代方法是从外壳程序内部启动带有剪贴板内容的文本编辑器,并在退出时自动执行编辑后的内容。例如:
#!/bin/bash
PBTEMP=$(mktemp -t pbtemp)
pbpaste > $PBTEMP
nano -t $PBTEMP
source $PBTEMP
rm $PBTEMP
在下Preferences -> Profiles -> Basic -> Advanced
,选中“将换行符粘贴为回车符”。(基本名称是一个配置文件的名称。如果使用另一个配置文件,则应选择该配置文件。)
在某些 shell中(zsh和bash对我有用,tcsh无效),这将使您(通过Ctrl-C)编辑或中止粘贴的内容,然后再将其任何部分传递给shell。
您可能需要创建一个新的“终端”窗口以使首选项开始工作。
我一直使用此功能,不仅用于粘贴和编辑复杂的命令,而且还可以查看带栏的文本,有时还可以通过使用Option键拖动来选择和复制子矩形。