问题描述
我有一些相当长的命令和文件路径,我已复制到剪贴板并需要在 TTY 中执行,但是文件路径太长而无法重新输入,我想将它们粘贴到 $
之后(我可以重新输入命令那么在他们之前),有没有办法做到这一点?
所以我想执行一个命令并将其放在以 $
开头的下一行,将复制的文本复制到剪贴板,如下所示:
$ specialCommandToPasteText
$ pastedText
我正在运行带有 GNOME 3.20 的 Ubuntu GNOME 16.04。
最佳方案
这很简单,但您需要一个额外的工具。
-
安装包
xsel
,它提供了一个简单的命令来访问剪贴板:sudo apt-get install xsel
-
找出您的桌面正在使用哪个
$DISPLAY
。通常它应该是:0
,但您可以通过在 GUI 桌面上的终端模拟器中运行以下命令来检查它:echo $DISPLAY
我将假设输出是
:0
,如果它不同,请将其替换为以下命令中的实际输出。 -
复制您想在 TTY 中执行的命令,例如使用
Ctrl
+C
。 -
切换到您要使用的 TTY,例如使用
Ctrl
+Alt
+F1
到 TTY1。输入您的用户名和密码登录。 -
输入您要运行的完整命令,但将您要从剪贴板插入的部分替换为
$(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 上的命令中,即可将桌面上的剪贴板内容插入其中。
次佳方案
就个人而言,我只使用文本文件:
-
在您的桌面环境中,打开一个终端并
echo "whatever long text you have copied" > file
-
拖放到 tty 和
$(cat file)
第三种方案
上面未列出的另一种可能的解决方法涉及使用 vim
,在命令模式下粘贴和运行 :!unix_command
:
-
将命令和路径复制到剪贴板
-
打开
vim
,进入命令模式Esc
,输入提示符:
-
键入 bang
!
然后粘贴Ctrl
+Shift
+V
您之前在提示符中复制的命令并执行