Leg*_*end 477 unix linux shell terminal clipboard
如何在使用终端时将命令的输出传输到剪贴板并将其粘贴回来?例如:
cat file | clipboard
Run Code Online (Sandbox Code Playgroud)
Leg*_*end 547
我一直想做到这一点,并找到了一个简单易行的方法.我写下了完整的程序,以防万一其他人需要它.
首先安装一个名为的16 kB程序xclip:
sudo apt-get install xclip
Run Code Online (Sandbox Code Playgroud)
然后,您可以将输出通过管道xclip传输到剪贴板中:
cat file | xclip
Run Code Online (Sandbox Code Playgroud)
要粘贴刚复制的文本,您应使用:
xclip -o
Run Code Online (Sandbox Code Playgroud)
为简化生活,您可以像我一样在.bashrc文件中设置别名:
alias "c=xclip"
alias "v=xclip -o"
Run Code Online (Sandbox Code Playgroud)
为了看看它有多有用,想象一下我想在一个新的终端窗口中打开我当前的路径(在某些系统上可能还有其他方法可以像Ctrl+ 那样做T,但这只是为了说明目的):
Terminal 1:
pwd | c
Terminal 2:
cd `v`
Run Code Online (Sandbox Code Playgroud)
注意` ` 周围v.这v首先作为命令执行,然后就地替换它以供cd使用.
仅将内容复制到X剪贴板
cat file | xclip
Run Code Online (Sandbox Code Playgroud)
如果要粘贴X应用程序以外的其他位置,请尝试以下方法:
cat file | xclip -selection clipboard
Run Code Online (Sandbox Code Playgroud)
Dav*_*ter 163
在OS X上,使用pbcopy; pbpaste走向相反的方向.
Bru*_*sky 52
我已经为Linux/OSX/Cygwin创建了一个类似于其他一些工具但略微独特的工具.我称之为它cb,它可以在这个github gist中找到.
在那个要点中,我演示了如何使用Linux,macOS和Cygwin通过命令行进行复制和粘贴.
_copy(){
cat | xclip -selection clipboard
}
_paste(){
xclip -selection clipboard -o
}
Run Code Online (Sandbox Code Playgroud)
_copy(){
cat | pbcopy
}
_paste(){
pbpaste
}
Run Code Online (Sandbox Code Playgroud)
_copy(){
cat > /dev/clipboard
}
_paste(){
cat /dev/clipboard
}
Run Code Online (Sandbox Code Playgroud)
注意:我原本打算在我对Bob Enohp的回答的评论中提到这一点.但后来我意识到我应该向我的要点添加一个自述文件.由于gist编辑器没有提供Markdown预览,所以我在这里使用了答案框,在复制/粘贴之后我想到了"我不妨提交答案".
此脚本以tee(参见man tee)为模型.
它就像您的普通复制和粘贴命令,但统一并能够感知您何时希望它可链接
$ date | cb
# clipboard contains: Tue Jan 24 23:00:00 EST 2017
Run Code Online (Sandbox Code Playgroud)
# clipboard retained from the previous block
$ cb
Tue Jan 24 23:00:00 EST 2017
$ cb | cat
Tue Jan 24 23:00:00 EST 2017
$ cb > foo
$ cat foo
Tue Jan 24 23:00:00 EST 2017
Run Code Online (Sandbox Code Playgroud)
$ date | cb | tee updates.log
Tue Jan 24 23:11:11 EST 2017
$ cat updates.log
Tue Jan 24 23:11:11 EST 2017
# clipboard contains: Tue Jan 24 23:11:11 EST 2017
Run Code Online (Sandbox Code Playgroud)
(按时间顺序,最后演示这个是有意义的)
# clipboard retained from the previous block
$ cb < foo
$ cb
Tue Jan 24 23:00:00 EST 2017
# note the minutes and seconds changed from 11 back to 00
Run Code Online (Sandbox Code Playgroud)
Bob*_*ohp 43
我写了这个小脚本,从复制/粘贴命令中获取猜测.
Linux版本的脚本依赖于已在系统中安装的xclip.该脚本称为剪贴板.
#!/bin/bash
# Linux version
# Use this script to pipe in/out of the clipboard
#
# Usage: someapp | clipboard # Pipe someapp's output into clipboard
# clipboard | someapp # Pipe clipboard's content into someapp
#
if command -v xclip 1>/dev/null; then
if [[ -p /dev/stdin ]] ; then
# stdin is a pipe
# stdin -> clipboard
xclip -i -selection clipboard
else
# stdin is not a pipe
# clipboard -> stdout
xclip -o -selection clipboard
fi
else
echo "Remember to install xclip"
fi
Run Code Online (Sandbox Code Playgroud)
OS X版本的脚本依赖于所有Mac上预装的pbcopy和pbpaste.
#!/bin/bash
# OS X version
# Use this script to pipe in/out of the clipboard
#
# Usage: someapp | clipboard # Pipe someapp's output into clipboard
# clipboard | someapp # Pipe clipboard's content into someapp
#
if [[ -p /dev/stdin ]] ; then
# stdin is a pipe
# stdin -> clipboard
pbcopy
else
# stdin is not a pipe
# clipboard -> stdout
pbpaste
fi
Run Code Online (Sandbox Code Playgroud)
使用脚本非常简单,因为您只需管道输入或输出,clipboard如这两个示例所示.
$ cat file | clipboard
$ clipboard | less
Run Code Online (Sandbox Code Playgroud)
use*_*552 22
将此添加到您的~/.bashrc:
# Now `cclip' copies and `clipp' pastes'
alias cclip='xclip -selection clipboard'
alias clipp='xclip -selection clipboard -o'
Run Code Online (Sandbox Code Playgroud)
现在剪辑p贴和c剪辑副本 - 但你也可以做更高级的东西:
Run Code Online (Sandbox Code Playgroud)clipp | sed 's/^/ /' | cclip↑缩进剪贴板; 适用于没有堆栈溢出{ }按钮的站点
您可以通过运行以下命令添加它:
printf "\nalias clipp=\'xclip -selection c -o\'\n" >> ~/.bashrc
printf "\nalias cclip=\'xclip -selection c -i\'\n" >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)
win*_*rrr 12
这些系统中的每一个都使用自己的工具将剪贴板功能合并到命令行界面(CLI) 中。这意味着,例如在 Windows Subsystem for Linux (WSL) 上使用 Ubuntu CLI 时,通常的xclip解决方案将不起作用。macOS 也是如此。
下表概述了不同系统上所需的复制/粘贴工具:
| 操作系统 | 复制 | 粘贴 |
|---|---|---|
| WSL | clip.exe |
powershell.exe Get-Clipboard |
| 长城 | > /dev/clipboard |
cat /dev/clipboard |
| 苹果系统 | pbcopy |
pbpaste |
| Linux | xclip -sel clip |
xclip -sel clip -o |
.bashrc解决方案只需将以下代码放入您的系统中~/.bashrc即可启用copy和paste在所有系统上使用。该解决方案适用于“普通”Linux 系统(即 Ubuntu、Debian)以及 WSL 和 macOS:
if grep -q -i microsoft /proc/version; then
# on WSL: version contains the string "microsoft"
alias copy="clip.exe"
alias paste="powershell.exe Get-Clipboard"
elif grep -q -i cygwin $(uname -a); then
# on CYGWIN: uname contains the string "cygwin"
alias copy="/dev/clipboard"
alias paste="cat /dev/clipboard"
elif [[ ! -r /proc/version ]]; then
# on MAC: version is not readable at all
alias copy="pbcopy"
alias paste="pbpaste"
else
# on "normal" linux
alias copy="xclip -sel clip"
alias paste="xclip -sel clip -o"
fi
Run Code Online (Sandbox Code Playgroud)
复印:
echo "hello world" | copy
# or for direct file input
copy < file
Run Code Online (Sandbox Code Playgroud)
粘贴:
paste > file
Run Code Online (Sandbox Code Playgroud)
mcv*_*vkr 11
对于 mac,这是使用命令行复制(到剪贴板)粘贴(从剪贴板)的示例方法
将pwd命令的结果复制到剪贴板作为
$ pwd | pbcopy
Run Code Online (Sandbox Code Playgroud)
使用剪贴板中的内容作为
$ cd $(pbpaste)
Run Code Online (Sandbox Code Playgroud)
dgo*_*gor 11
苹果系统:
your_command_which_gives_output | pbcopy
Run Code Online (Sandbox Code Playgroud)
WSL / GNU/Linux(需要 xclip 包):
your_command_which_gives_output | xclip -sel clip
Run Code Online (Sandbox Code Playgroud)
Windows 上的 Git Bash:
your_command_which_gives_output | clip
Run Code Online (Sandbox Code Playgroud)
如果不使用外部工具,如果要连接到服务器视图SSH,这是一个相对简单的命令:
从Windows 7+命令提示符:
ssh user@server cat /etc/passwd | clip
Run Code Online (Sandbox Code Playgroud)
这会将远程文件的内容放入本地剪贴板.
(该命令需要为密钥运行Pageant,否则它将要求您输入密码.)
我正在使用Parcellite xsel并将最后一次提交消息复制git到我的剪贴板管理器(由于某种原因xclip不起作用):
$ git log -1 --pretty=%B | xsel -i -b
Run Code Online (Sandbox Code Playgroud)
当我必须复制我的时,我通常会运行这个命令ssh-key:
cat ~/.ssh/id_rsa.pub | pbcopy
Run Code Online (Sandbox Code Playgroud)
cmd+v或ctrl+v其他任何地方。
在 Wayland 上 xcopy 似乎不起作用,请改用wl-clipboard。例如在软呢帽上
sudo dnf install wl-clipboard
tree | wl-copy
wl-paste > file
Run Code Online (Sandbox Code Playgroud)
小智 5
我制作了一个提供类似功能的小工具,但没有使用 xclip 或 xsel。stdout被复制到剪贴板并可以再次粘贴到终端中。看:
https://sourceforge.net/projects/commandlinecopypaste/
请注意,该工具不需要 X 会话。剪贴板只能在终端内使用,无需通过Ctrl+V单击鼠标中键粘贴到其他 X 窗口中。
小智 5
对于那些使用安装在 Windows 系统(称为 Windows Subsystem for Linux (WSL))上的 bash 的用户,尝试 xclip 将给出错误:
Error: Can't open display: (null)
Run Code Online (Sandbox Code Playgroud)
相反,请记住 Linux 子系统可以访问 Windows 可执行文件。可以像这样使用clip.exe
echo hello | clip.exe
Run Code Online (Sandbox Code Playgroud)
它允许您使用粘贴命令(ctrl-v)。