【问题标题】:Paste bash command, but make sure it doesn't run粘贴 bash 命令,但确保它没有运行
【发布时间】:2019-06-15 10:18:42
【问题描述】:

有时当您 ctrl-v 使用 bash 时,即使您不打算运行它,它也会运行命令 - 有没有办法粘贴命令进入 bash shell / 终端,确保您实际上没有运行任何命令?

如果您可以通过编程方式设置终端提示符上的内容,则可以在 MacOS 上使用 bash 来执行此操作:

export BASH_PROMPT="$(pbpaste)"

这与我刚刚提出的另一个问题有关: How to change the value that's in the prompt

【问题讨论】:

  • AIUI 括号粘贴模式执行此操作(在 bash v4.4 及更高版本中),但我找不到关于它的好的文档。有关基本信息,请参阅here

标签: bash shell terminal


【解决方案1】:

有一个Readline变量:

enable-bracketed-paste
当设置为On 时,Readline 将配置终端,使其能够将每个粘贴作为单个字符串插入到编辑缓冲区中,而不是将每个字符视为从键盘读取的。这可以防止粘贴的字符被解释为编辑命令。默认为off

要打开它,请输入类似

set enable-bracketed-paste on

到你的~/.inputrc

这是在 Bash 4.4 / Readline 7.0 中引入的。

【讨论】:

  • 有没有办法以编程方式写入编辑缓冲区?
  • @AlexanderMills 我唯一知道发生这种情况的是当您运行自动完成功能时,您拥有包含当前命令行的 COMP_LINE 变量 - 但我不认为您可以设置,只能读取。
【解决方案2】:

在 bash 中使用 ^X^E 又名 Ctrl+X Ctrl+E 打开您的 $EDITOR 以进行命令输入。

随意粘贴和/或编辑任意多行。完成后,保存并退出,bash 将运行它。

vi模式下,快捷方式为v

【讨论】:

  • 所以我想写信给$EDITOR 会设置提示命令,这是对OP 中链接问题的回答?也许它可以像我在 OP 中指出的那样以编程方式完成?
  • 我希望像使用不涉及人工交互的脚本一样以编程方式执行此操作 mmkay
  • 您运行的哪个 bash shell 允许您使用 ^V 进行粘贴?我只在 windows 上看到过,在 windows 上的 bash 中没有。
  • 如果您想将命令粘贴到 shell 中而不冒过早运行它们的风险,这就是方法。如果您想做其他事情,请编辑您的问题以反映这一点
  • 这在许多编辑器/终端组合中是安全的。见123
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
  • 1970-01-01
  • 2022-11-25
相关资源
最近更新 更多