如何将命令粘贴到TTY中?


20

我有一些相当长的命令和文件路径,它们已经复制到剪贴板并需要在TTY中执行,但是文件路径太长而无法重新键入,我只想在(之后$可以重新键入命令然后他们),有没有办法做到这一点?

因此,我想执行一个命令,并在下一行将$其复制到剪贴板,如下所示:

$ specialCommandToPasteText
$ pastedText

我正在使用GNOME 3.20运行Ubuntu GNOME 16.04。


3
将命令粘贴到文本编辑器中的Bash脚本中,然后从TTY中执行脚本吗?
尼克·温伯格

@NickWeinberg:并不是一个真正的选择,这是CLI中的全部功能,我在那里运行的程序仅具有复制功能。

2
您要从哪些程序复制它们?
尼克·温伯格

您是否正在gpm按照自己对上一个问题的回答中的建议,在VT中提供鼠标支持?
钢铁司机

1
一种可能的解决方案是在tmux屏幕中
Nick Weinberg

Answers:


28

很简单,但是您需要其他工具。

  1. 安装该软件包xsel,该软件包提供了访问剪贴板的简单命令:

    sudo apt-get install xsel
    
  2. 找出$DISPLAY您的桌面正在使用。通常应该是:0,但是您可以通过在GUI桌面上的终端仿真器中运行以下命令来进行检查:

    echo $DISPLAY
    

    我将假设输出为:0,如果不同,请在以下命令中将其替换为您的实际输出。

  3. 在TTY中复制要执行的命令,例如,使用Ctrl+ C

  4. 切换到要使用的TTY,例如,使用Ctrl+ Alt+ 切换到TTY1 F1
    输入用户名和密码登录。

  5. 输入您要运行的完整命令,但将要从剪贴板插入的部分替换为$(DISPLAY=:0 xsel -ob)

    例如,如果您复制了大量要安装的软件包,则可以在TTY中键入以下内容:

    sudo apt-get update && sudo apt-get install $(DISPLAY=:0 xsel -ob)
    

    剪贴板代码段不一定必须在命令末尾,它可能出现在任何地方。


为了进一步简化操作,让我们将其移动DISPLAY=:0 xsel -ob到脚本中还有些复杂。我将其命名PASTE(因为paste已被使用),但是您也可以使用其他名称。

要在每个用户都可以运行该脚本文件的位置创建脚本文件而不必指定完整路径(我/usr/local/bin为此建议),并使该脚本文件可执行,只需运行以下两个命令:

( echo '#!/bin/bash' && echo 'DISPLAY=:0 xsel -ob' ) | sudo tee /usr/local/bin/PASTE
sudo chmod +x /usr/local/bin/PASTE

现在,您只需将其嵌入$(PASTE)TTY中的命令中,即可从桌面上插入剪贴板内容。


2
谢谢!现在,这将帮助我完成比我最初要求的更多的事情!:)

1
您甚至可以将DISPLAY=:0 xsel -obBash别名或小脚本存储为任何地方(将其命名为PASTE),并且仅使用简化形式,例如$(PASTE)在命令中使用剪贴板内容。
字节指挥官

非常好的方法
Sergiy Kolodyazhnyy

21

就个人而言,我只使用文本文件:

  1. 在您的桌面环境中,打开一个终端,然后

    echo "whatever long text you have copied" > file
    
  2. 放到tty和

    $(cat file)
    

2
很高兴知道。我实际上并不认为像这样的简单命令会很好用。有时候头脑只是觉得太复杂了。谢谢!=)
Terrance

1
我只是使用some-command 'shift + insert(粘贴)。 '返回。在单引号或双引号内粘贴可防止粘贴文本中的换行符运行命令,然后再对其进行编辑以解决任何问题。IDK将文本放在文件中会带来什么好处。Bash具有非常强大的行编辑键,例如按ctrl-left或ctrl-right箭头可以逐字移动。alt-backspace删除向后单词。ALT-d删除前进的话,等等,等等
彼得·科德斯

哦,我刚刚发现他说TTY时,OP意味着文本控制台VT。确实应该编辑这个问题,因为您可以在其上运行shell的每个终端都是tty,包括由类似xterm的程序控制的伪终端。
彼得·科德斯

@PeterCordes是的,但是术语“ tty”经常(如果不准确的话)用来指虚拟控制台。
terdon

4

上面未列出的另一个可能的解决方法涉及使用vim,粘贴并:!unix_command在命令模式下运行:

  1. 将命令和路径复制到剪贴板
  2. 打开vim,进入命令模式Esc,输入提示:
  3. 键入一个爆炸! ,然后将Ctrl+ + Shift+ V您先前复制的命令粘贴到提示中并执行
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.