我在 Ubuntu 14.04 中工作并使用 Gedit。
现在我有以下代码(从 Gedit 中的“外部工具”菜单运行)来获取 Gedit 当前打开的文档的路径到剪贴板。
echo -n $GEDIT_CURRENT_DOCUMENT_URI | xclip -sel clip;
现在我还想将结果显示echo -n $GEDIT_CURRENT_DOCUMENT_URI
到输出窗口(使用相同的“echo”语句),同时复制到剪贴板。
我怎样才能实现这个目标?
答案1
要将输出复制到剪贴板并输出到当前终端,您可以简单地使用tee
,它会将其输出stdin
到作为参数传递给它的任何文件并输出到stdout
;您可以使用运行的进程替换xclip
来“伪造”常规文件并输出到它而不是常规文件:
echo -n $GEDIT_CURRENT_DOCUMENT_URI | tee >(xclip -selection clipboard)
另一个选项是输出到其中一个免费的“默认”伪终端 (tty1 到 tty6),它们在“/dev”中有一个对应的设备文件 (“/dev/tty1”到“/dev/tty6”):
echo -n $GEDIT_CURRENT_DOCUMENT_URI | tee >(xclip -selection clipboard) >/dev/tty1
另一个选择是使用命名管道输出到另一个“监听”伪终端;这需要设置“监听”终端:
首先打开“监听”终端并运行此脚本(为了举例说明,我假设该脚本正在运行~/tmp
):
#!/bin/bash
mkfifo fifo # creates a named pipe named "fifo" in the current working directory
trap 'rm fifo; exit 0' 1 2 3 13 15 # traps SIGHUP, SIGINT, SIGQUIT, SIGPIPE and SIGTERM; removes "fifo" and exits upon the reception of each of them
while [ 1 ]; do
cat fifo # outputs the content of "fifo"
done
这将在当前工作目录中创建一个名为“fifo”的命名管道,并将不断输出其内容,直到脚本执行停止;
然后使用 Gedit 的外部工具运行第二个命令的修改版本,它不是将输出重定向到“/dev/tty1”,而是将其重定向到命名管道:
echo -n $GEDIT_CURRENT_DOCUMENT_URI | tee >(xclip -selection clipboard) >>~/tmp/fifo
使用两个实例的示例输出gnome-terminal
:
在正确的终端上运行脚本
echo -n $GEDIT_CURRENT_DOCUMENT_URI | tee >(xclip -selection clipboard) >>~/tmp/fifo
在左侧终端运行
击球CTRL+ SHIFT+V
答案2
我有一个类似的自答问题,由于与此问题重复而被关闭。但是,它与此处接受的答案完全不同,因此我认为值得在此处发布。
使用xclip
xclip
允许您将输出保存到剪贴板。要安装它,请使用:
sudo apt update && sudo apt install xclip
然后像这样使用它:
$ ls -l | tee >(xclip -selection clipboard)
total 9788
-rw-rw-r-- 1 rick rick 9950180 Dec 12 09:13 QueryResults.csv
-rw-rw-r-- 1 rick rick 6491 Oct 31 12:18 StackQuery
-rwxrwxr-x 1 rick rick 55970 Dec 12 18:47 stack-to-blog.py
屏幕上显示命令后的输出ls
也将位于剪贴板中,可以通过Ctrl+V或Right-Click
菜单以及选项插入到大多数应用程序中Paste
。
xclip
为命令创建别名
如果你打算多次使用它,你需要创建一个alias
。编辑你的~/.bashrc
文件并输入以下行:
alias clip="tee >(xclip -selection clipboard)"
然后不要输入:
ls -l | tee >(xclip -selection clipboard)
您需要输入的是:
ls -l | clip
笔记:保存~/.bashrc
文件后,直到下次重新启动终端或使用命令获取资源后,该文件才可使用. ~/.bashrc