【问题标题】:Pipe to/from the clipboard in a Bash script在 Bash 脚本中通过管道传入/传出剪贴板
【发布时间】:2010-10-19 11:18:02
【问题描述】:

是否可以在 Bash 中与剪贴板进行管道传输?

无论是通过管道传输到/从设备句柄还是使用辅助应用程序,我都找不到任何东西。

例如,如果/dev/clip 是一个链接到剪贴板的设备,我们可以这样做:

cat /dev/clip        # Dump the contents of the clipboard
cat foo > /dev/clip  # Dump the contents of "foo" into the clipboard

【问题讨论】:

  • 我一直在 vim 中使用:%y+,这是 vim 的说法,意思是“将所有行拉(复制)到 '+' 寄存器(X PRIMARY 剪贴板)”。如果您想具体一点,可以用范围替换 %。但是有三个警告: 1. 现在,您必须先将任何文本保存到文件中,然后才能复制它。这与答案中提到的xclip 命令形成对比。 2. 如果你还不知道如何 vim,这可能会很乏味。 3.只有在编译vim时启用了某个功能才可以这样做。如果你安装了 GVim,它应该在 vim 的 GUI 和终端实例中默认启用。
  • @BradenBest 你应该把它作为答案。我在 NIX 环境中,无法安装 xclip。你的回答就像一个魅力。
  • @HankCa 好的,我发布了an answer。告诉我你的想法。
  • @BradenBest 这是一个非常全面的答案。我只是喜欢:%y+ 一个,但是好的,你已经涵盖了所有的基础!不错。
  • 另一种选择:使用一点 perl 脚本:不需要安装。见my answer below

标签: linux bash macos clipboard


【解决方案1】:

Linux 中有不同的剪贴板; X 服务器有一个,窗口管理器可能有另一个,等等。没有标准设备。

哦,是的,在 CLI 上,屏幕程序也有自己的剪贴板,还有一些其他应用程序,如 Emacsvi

在 X 中,您可以使用xclip

您可以查看此线程以获取其他可能的答案: http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2004-07/0919.html

【讨论】:

  • 听起来创建 /dev/clip 对某人来说是个好项目。
  • 我完全了解多个剪贴板。这如何使我的问题更难回答?
  • 如果剪贴板是标准化的,这将是有意义的,如果您可以使用 /dev/clip1, /dev/clip2 .. /dev/clip 来访问它们,可能不会有什么坏处,唯一的问题是它们是用户特定的,设备是系统范围的。但是如果你制作一个根据访问 UID 进行掩码的内核设备驱动程序,它应该可以按预期工作。
【解决方案2】:

试试

xclip

xclip - command line interface to X selections (clipboard) 

man

【讨论】:

    【解决方案3】:

    您可以处理大量剪贴板。我希望您可能是想要将内容放入 X Windows 主剪贴板的 Linux 用户。通常,您要与之交谈的剪贴板有一个实用程序可以让您与之交谈。

    在 X 的情况下,有 xclip(和其他)。 xclip -selection c 将发送数据到剪贴板,在大多数应用程序中可以使用 Ctrl + CCtrl + V .

    如果您使用的是 Mac OS X,则有 pbcopy。例如,cat example.txt | pbcopy

    如果您处于 Linux 终端模式(无 X),请查看具有剪贴板的 gpmScreen。试试屏幕命令readreg

    在 Windows 10+ 或 Cygwin 下,使用 /dev/clipboardclip

    【讨论】:

    • cygwin: /dev/clipboard
    • 在 Windows 上,/dev/clipboard 也适用于 Msys/MinGW bash shell
    • 请注意,xclip -selection c 会将数据发送到剪贴板,在大多数应用程序中与 ^C、^V 配合使用
    • 在较新的 Windows 版本上,您可以像这样使用clipdir | clip
    • 遗憾的是 GNU/Linux 没有像 /dev/clipboard 这样的设备,并且强制安装 xclip 或者 gpm 至少在 Kubuntu 中默认缺少 (我猜在大多数其他发行版).
    【解决方案4】:

    确保您使用的是alias xclip="xclip -selection c" 否则您将无法使用 Ctrl+v 进行粘贴。

    示例: 运行echo -n test | xclip后,Ctrl+v会粘贴test

    【讨论】:

    • 如何在没有那个命令参数的情况下粘贴它?
    • xclip -selection clipboard -o
    • 因为我经常在 osx 和 linux 之间来回走动,所以我的 dotfiles 中有以下内容。 alias pbcopy="xclip -selection c"alias pbpaste="xclip -selection clipboard -o"希望对您有所帮助。
    • @ApockofFork,xclip 不是添加换行符,echo 是。试试printf test | xclip -i -selection clipboard。 (printf 不会添加换行符,除非你写 'test\n'。)
    • 或者用echo -n代替printf
    【解决方案5】:

    在 macOS 上,使用内置的 pbcopypbpaste 命令。

    例如,如果你运行

    cat ~/.bashrc | pbcopy
    

    ~/.bashrc 文件的内容可以通过 Cmd + V 快捷方式粘贴。

    要将当前剪贴板保存到文件,请将输出 pbpaste 重定向到文件:

    pbpaste > my_clipboard.txt
    

    【讨论】:

      【解决方案6】:

      在 Windows(使用 Cygwin)上尝试 cat /dev/clipboardecho "foo" > /dev/clipboard 如本文所述。

      【讨论】:

      • 正如用户@maep 在另一条评论中提到的那样,较新版本的 Windows(我只能确认 Win10)可以简单地通过管道传输到 clip。我正在使用 msysgit 1.9.5,这很有效。
      • echo "foo" > /dev/clipboard 似乎完全破坏了换行符(不是 \r\n \n 事情,而是完全消失了)
      • 链接断开修复(无法编辑):pgrs.net/2008/01/11/command-line-clipboard-access
      【解决方案7】:

      在 Windows (Cygwin) 中复制并粘贴到剪贴板:

      见:

      $ clip.exe -?
      
      CLIP
      Description:
          Redirects output of command line tools to the Windows clipboard.
          This text output can then be pasted into other programs.
      Parameter List:
      /?                  Displays this help message.
      Examples:
      DIR | CLIP          Places a copy of the current directory
                              listing into the Windows clipboard.
      CLIP < README.TXT   Places a copy of the text from readme.txt
                              on to the Windows clipboard.
      

      还有getclip(可以用来代替Shift + Ins!)和putclip(echo oaeuoa | putclip.exe 放入clip)。

      【讨论】:

        【解决方案8】:

        这是一个即用型 Bash 脚本,用于读取适用于多个平台的剪贴板。

        如果您添加功能(例如,更多平台),请在此处编辑脚本。

        #!/bin/bash
        # WF 2013-10-04
        #
        # Multi-platform clipboard read access
        #
        # Supports
        #   Mac OS X
        #   Git shell / Cygwin (Windows)
        #   Linux (e.g., Ubuntu)
        
        #
        # Display an error
        #
        error() {
          echo "error: $1" 1>&2
          exit 1
        }
        
        #
        # getClipboard
        #
        function getClipboard() {
         os=`uname`
              case $os in
                # Git Bash  (Windows)
                MINGW32_NT-6.1)
                  cat /dev/clipboard;;
                # Mac OS X
                Darwin*)
                  pbpaste;;
                # Linux
                Linux*)
                  # Works only for the X clipboard - a check that X is running might be due
                  xclip -o;;
                *)
                  error "unsupported os $os";;
              esac
        }
        
        tmp=/tmp/clipboard$$
        getClipboard >$tmp
        cat $tmp
        # Comment out for debugging
        rm $tmp
        

        【讨论】:

          【解决方案9】:

          我多年前编写的一些 Windows 程序。它们允许您转储、推送、附加和打印剪贴板。它的工作原理是这样的:

          dumpclip | perl -pe "s/monkey/chimp/g;" | pushclip
          

          包含源码:cmd_clip.zip

          【讨论】:

            【解决方案10】:

            仅适用于 Mac:

            echo "Hello World" | pbcopy
            pbpaste
            

            它们位于/usr/bin/pbcopy/usr/bin/pbpaste

            【讨论】:

              【解决方案11】:

              安装

              # You can install xclip using `apt-get`
              apt-get install xclip
              
              # or `pacman`
              pacman -S xclip
              
              # or `dnf`
              dnf install xclip
              

              如果您无权访问apt-getpacmandnf,则可以在sourceforge 上获得资源。

              设置

              重击

              ~/.bash_aliases,添加:

              alias setclip="xclip -selection c"
              alias getclip="xclip -selection c -o"
              

              不要忘记使用. ~/.bash_aliases 或重新启动您的配置文件来加载您的新配置。

              ~/.config/fish/config.fish,添加:

              abbr setclip "xclip -selection c"
              abbr getclip "xclip -selection c -o"
              

              不要忘记通过重新启动终端来重新启动您的 fish 实例以应用更改。

              用法

              您现在可以使用setclipgetclip,例如:

              $ echo foo | setclip
              $ getclip
              foo
              

              【讨论】:

              • 对于所有其他发行版:您可以从sourceforge.net/projects/xclip下载源代码
              • +1 最佳解决方案!在 Arch 中,sudo pacman -S xclip。但请注意.bashrc 不是最好的地方。我建议最终用户阅读正确的 bashrc、bash_aliases 和 .profile 文件以及 bash 如何处理每个文件。提示:改为将其放在 .bash_aliases 中。
              • 感谢@eduncan911! :) 添加了使用pacman 包管理器的选项并删除了.bashrc 命题。我知道.bash_aliases 更适合,但最终结果是相同的(.bashrc 只需要.bash_aliases,如果它存在)。如果人们想要一个凌乱的系统,就让他们拥有一个。 :)
              • @eduncan911 我在 bash 手册中找不到提到 .bash_aliases。我相信这一定是对.bashrc 的发行版特定修改。 (我见过特定于发行版的.bashrcs 导入.bash_profile(如果存在)。)基于此,我想说.bash_aliases 不是通用约定,但对于拥有它的人来说是一种方便的速记。跨度>
              • @jpaugh 你是对的。最后是我的.bashrc 来源.bash_aliases。 ;) 我遵循这个旧约定,它在 Arch、Ubuntu/Debian、Raspberry 变体、macOS/OSX 和 Windows Bash 之间保持 100% 兼容:stefaanlippens.net/my_bashrc_aliases_profile_and_other_stuff 按照这个约定,我在我接触的所有机器上使用完全相同的点文件.挺好看的:github.com/eduncan911/dotfiles
              【解决方案12】:

              这是一个简单的 Python 脚本,可以满足您的需要:

              #!/usr/bin/python
              
              import sys
              
              # Clipboard storage
              clipboard_file = '/tmp/clipboard.tmp'
              
              if(sys.stdin.isatty()): # Should write clipboard contents out to stdout
                  with open(clipboard_file, 'r') as c:
                      sys.stdout.write(c.read())
              elif(sys.stdout.isatty()): # Should save stdin to clipboard
                  with open(clipboard_file, 'w') as c:
                      c.write(sys.stdin.read())
              

              将此作为可执行文件保存在路径中的某处(我将其保存到/usr/local/bin/clip。您可以通过管道输入要保存到剪贴板的内容...

              echo "Hello World" | clip
              

              您可以将剪贴板中的内容通过管道传输到其他程序...

              clip | cowsay
               _____________
              < Hello World >
               -------------
                      \   ^__^
                       \  (oo)\_______
                          (__)\       )\/\
                              ||----w |
                              ||     ||
              

              单独运行它只会输出剪贴板中的内容。

              【讨论】:

              • 这在您使用单台计算机时有效,但不允许您在计算机之间复制内容。
              • 似乎只有 ` echo str > tmpfile` 和 cat tmpfile ,而不是剪贴板操作。 //与@horta 的答案相同。
              • 这似乎没有设置剪贴板变量,所以我无法将内容粘贴到其他应用程序中 - 它不是真正的剪贴板!
              【解决方案13】:
                xsel -b
              

              为 X Window 做这项工作,而且它大部分已经安装。 看看xsel 的手册页是值得的。

              【讨论】:

                【解决方案14】:

                xsel 在 Debian/Ubuntu/Mint 上

                # append to clipboard:
                cat 'the file with content' | xsel -ab
                
                # or type in the happy face :) and ...
                echo 'the happy face :) and content' | xsel -ib
                
                # show clipboard
                xsel -ob
                
                # Get more info:
                man xsel
                

                安装

                sudo apt-get install xsel
                

                【讨论】:

                • 这与echo "foo" | xclip -selection c有何不同?
                • 关于这个Ask Ubuntu answer有一些答案,但主要是xselxclip在各方面都是等效的,除了xclip可以按名称读/写文件,但xsel需要如果你想访问一个文件,shell 重定向。
                • xsel 在脚本中运行良好,而 xclip 仅在提示符下运行。不知道为什么。
                • 也可用于基于 Redhat 的系统。在像 xclip 这样的脚本中使用时不会奇怪地阻塞。
                【解决方案15】:

                如果您像我一样在没有 root 权限的 Linux 服务器上运行并且没有任何 xclipGPM 您可以通过使用临时文件来解决此问题。例如:

                $ echo "Hello, World!" > ~/clip
                $ echo `cat ~/clip`
                Hello, World!
                

                【讨论】:

                • 我看不出缺少 root 权限是如何影响这一点的。
                • @BradenBest 缺少 root 权限意味着我无法安装东西。
                • 但是你会安装什么? X?在服务器上?除非您托管一些奇怪的 X 转发服务,否则我看不出您为什么要这样做。
                • @BradenBest 不确定。任何程序或服务都可以让我执行复制粘贴。
                • 好吧,如果您使用任何X selections(“剪贴板”和任何提及 xclip/xsel 都必然暗示),您需要一个活动的 X 会话(因此需要一个 X服务器),以便您可以首先访问选择。要了解我的意思,请尝试在本地计算机上运行 DISPLAY="" xsel。它将在错误时退出,无法找到会话"",并且不会与任何 X 选择进行交互。这就是为什么我最初说我看不到 root 权限是如何影响这一点的:root 或没有 root,您不太可能发现 X 选择在服务器环境中有用。
                【解决方案16】:

                还有xclip-copyfile

                【讨论】:

                  【解决方案17】:

                  昨天我发现自己有一个问题:“如何在不同的用户会话之间共享剪贴板?”。使用 Ctrl + Alt + F7 - Ctrl + Alt + 在会话之间切换时F8,其实复制的东西是不能粘贴的。

                  我提出了以下基于命名管道的快速而肮脏的解决方案。它肯定很裸露和原始,但我发现它很实用:

                  user1@host:~$ mkfifo /tmp/sharedClip
                  

                  然后在发送终端中

                  user1@host:~$ cat > /tmp/sharedClip
                  

                  最后,在接收端:

                  user2@host:~$ cat /tmp/sharedClip
                  

                  现在,您在第一个终端中键入或粘贴任何内容,并且(在点击 Return 后),它将立即出现在接收终端中,您可以从那里再次复制并粘贴到您喜欢的任何地方。

                  当然,这不仅仅严格地从用户 1 的剪贴板中获取内容以使其在用户 2 的剪贴板中可用,而是需要额​​外的一对粘贴和复制点击。

                  【讨论】:

                  • 似乎并不令人惊讶。两个不同的 X 服务器 = 两个不同的选择集。但是,您可以设置一个通过xsel/xclip 进行输入/输出的脚本。例如,一端侦听是否有任何选择发生了变化,然后自动将其(通过命名的 FIFO)通过管道传递给正在侦听一个或多个管道的另一个脚本,后者将其插入到自己的 X 选择中。因此,复制文本会自动导致相同的文本出现在另一个 X 会话的选择中。不要忘记$DISPLAY
                  【解决方案18】:

                  有几种方法。已经提到的一些方法包括(我认为)tmuxScreenVimEmacs 和 shell。我不了解 Emacs 或 Screen,所以我将介绍其他三个。

                  Tmux

                  虽然不是 X 选择,但 tmux 具有可通过 prefix-[ 访问的复制模式(prefix 默认为 Ctrl + B)。用于此模式的缓冲区是 tmux 的独立和专有的,这开辟了很多可能性,并且在适当的情况下使其比 X 选择更通用。

                  要退出这个模式,点击Q;导航,使用你的 Vim 或 Emacs 绑定(默认 = Vim),所以hjkl 用于移动,v/V/C-v 用于字符/行/块选择等。当您选择时,点击 Enter复制并退出模式。

                  要从此缓冲区粘贴,请使用prefix-]

                  外壳

                  默认情况下,X11 的任何安装似乎都附带两个程序:xclipxsel(有点像它同时附带 startxxinit)。大多数其他答案都提到了xclip,我真的很喜欢xsel,因为它简洁,所以我将介绍xsel

                  来自xsel(1x)

                  输入选项\

                  -a, --append \

                  将标准输入附加到选择中。暗示 -i

                  -f, --follow \

                  随着标准输入的增长附加到选择。暗示 -i

                  -i, --输入\

                  将标准输入读入选择。

                  输出选项\

                  -o, --输出\

                  将选择写入标准输出。

                  操作选项\

                  -c, --clear \

                  清除选择。覆盖所有输入选项。

                  -d, --delete \

                  请求删除当前选择。这不仅清除了选择,而且还向选择所在的程序请求删除选择的内容。覆盖所有输入选项。

                  选择选项\

                  -p, --primary \

                  对 PRIMARY 选择进行操作(默认)。

                  -s,--二级\

                  对 SECONDARY 选择进行操作。

                  -b, --剪贴板\

                  对剪贴板选择进行操作。

                  这就是您需要知道的全部内容。 p(或无)用于PRIMARYs 用于SECONDARYb 用于CLIPBOARDo 用于输出。

                  示例:假设我想从 TTY 复制 foo 的输出并将其粘贴到网页以获取错误报告。为此,理想的做法是复制到 TTY/X 会话/从 TTY/X 会话复制。所以问题变成了我如何从 TTY 访问剪贴板?

                  对于本例,我们假设 X 会话正在显示 :1

                  $ foo -v
                  Error: not a real TTY
                  details:
                  blah blah @ 0x0000000040abeaf4
                  blah blah @ 0x0000000040abeaf8
                  blah blah @ 0x0000000040abeafc
                  blah blah @ 0x0000000040abeb00
                  ...
                  $ foo -v | DISPLAY=:1 xsel -b # copies it into clipboard of display :1
                  

                  然后我可以像往常一样将其 Ctrl + V 放入表单中。

                  现在假设支持站点上的某个人给了我一个运行命令来解决问题。复杂而漫长。

                  $ DISPLAY=:1 xsel -bo
                  sudo foo --update --clear-cache --source-list="http://foo-software.com/repository/foo/debian/ubuntu/xenial/164914519191464/sources.txt"
                  $ $(DISPLAY=:1 xsel -bo)
                  Password for braden:
                  UPDATING %%%%%%%%%%%%%%%%%%%%%%% 100.00%
                  Clearing cache...
                  Fetching sources...
                  Reticulating splines...
                  Watering trees...
                  Climbing mountains...
                  Looking advanced...
                  Done.
                  $ foo
                  Thank you for your order. A pizza should arrive at your house in the next 20 minutes. Your total is $6.99
                  

                  Pizza ordering 似乎是对命令行的有效使用。

                  ...继续前进。

                  Vim

                  如果用+clipboard 编译(这很重要!检查你的vim --version),Vim 应该可以访问X PRIMARYCLIPBOARD 选项。这两个选项可分别从*+ 寄存器访问,并且可以像任何其他寄存器一样在您空闲时写入和读取。

                  例如:

                  :%y+    ; copy/yank (y) everything (%) into the CLIPBOARD selection (+)
                  "+p     ; select (") the CLIPBOARD selection (+) and paste/put it
                  ggVG"+y ; Alternative version of the first example
                  

                  但是,如果您的 Vim 副本不直接支持访问 X 选择,那也不是世界末日。您可以使用上一节所述的xsel 技术。

                  :r ! xsel -bo ; read  (r) from the stdout of (!) `xsel -bo`
                  :w ! xsel -b  ; write (w) to the stdin of    (!) `xsel -b`
                  

                  绑定几个键组合,你应该很好。

                  【讨论】:

                  • 当从非 X 环境调用 X 应用程序时,一定要记得使用 DISPLAY=。 X 应用程序需要DISPLAY 环境变量来确定它们正在与哪个服务器(或者只有一个服务器处理多个会话?)。例如,从 TTY 尝试 DISPLAY=:1 firefox(或任何您的显示 ID;我的恰好是 :1)。
                  • 对我来说,我的环境中的选择是 VIM 中的:%y+
                  【解决方案19】:

                  从这个帖子中,有一个选项不需要安装任何gclip/xclip/xsel 第三方软件。

                  Perl 脚本(因为通常总是安装 Perl)

                  use Win32::Clipboard;
                  print Win32::Clipboard::GetText();
                  

                  【讨论】:

                  【解决方案20】:

                  在 macOS 中,使用 pbpaste

                  例如:

                  更新剪贴板

                  pbpaste  | ruby -ne ' puts "\|" + $_.split( )[1..4].join("\|") ' | pbcopy
                  

                  【讨论】:

                    【解决方案21】:

                    安装 xcopy 实用程序,然后在终端中输入:

                    复制

                    Thing_you_want_to_copy | xclip -selection c
                    

                    粘贴

                    myvariable=$(xclip -selection clipboard -o)
                    

                    我注意到很多答案推荐 pbpastepbcopy。如果您喜欢这些实用程序,但由于某种原因它们在您的存储库中不可用,您总是可以为 xcopy 命令创建一个别名并将它们称为 pbpaste 和 pbcopy。

                    alias pbcopy="xclip -selection c"
                    alias pbpaste="xclip -selection clipboard -o"
                    

                    那么它看起来像这样:

                    Thing_you_want_to_copy | pbcopy
                    myvariable=$(pbpaste)
                    

                    位于一个名为 doug 的用户为我写的 cmets 中的答案。因为我觉得它很有帮助,所以我决定在答案中重申。

                    【讨论】:

                    • 太好了,你的别名部分与MacOS对应得很好。
                    【解决方案22】:

                    Windows Subsystem for Linux (WSL) 上,您可以使用 clip.exe 复制到剪贴板:

                    cat file | clip.exe
                    

                    请记住使用| 管道命令。而不是&gt; 命令,因为这不起作用。

                    【讨论】:

                    • 这也适用于 gitbash。
                    【解决方案23】:

                    2018年答案

                    使用clipboard-cli。它适用于 macOS、Windows、Linux、OpenBSD、FreeBSD 和 Android,没有任何实际问题。

                    安装它:

                    npm install -g clipboard-cli
                    

                    那么你可以这样做:

                    echo foo | clipboard 
                    

                    如果您愿意,您可以通过在您的 .bashrc.bash_profile.zshrc 中输入以下内容来别名为 cb

                    alias cb=clipboard
                    

                    【讨论】:

                    • 你确定这是一个安全的npm 包吗?
                    • @Stas,我希望如此,它是由最多产的节点贡献者 Sindresorhus (github.com/sindresorhus) 制作的。他负责 Ava 测试库、xo linter、Yeoman 和无数其他项目。他还负责无数像这样的小型库,这些库将他的代码放在互联网上几乎所有使用 JS 的网站上。这并不是说他不能妥协。只是他的 repos 的关注度和他自己的声誉使得它比大多数随机 npm repos 的可能性要小得多。
                    • 酷!在 xclip 不工作的 Ubuntu GNU/Linux 上工作。
                    • 虽然它不适用于 WSL——windows 中的 linux。
                    • 周围的JS太多了
                    【解决方案24】:

                    我找到了一个很好的参考:How to target multiple selections with xclip

                    就我而言,我想将内容粘贴到剪贴板上并查看粘贴的内容,因此我还使用了带有文件描述符的tee 命令:

                    echo "just a test" | tee >(xclip -i -selection clipboard)
                    

                    &gt;() 是一种进程替换形式。 Bash 用括号内连接到程序标准输入的文件描述符的路径替换每个。

                    teecommand 分叉您的命令,允许您“通过管道传输其内容”并在标准输出“stdout”上查看结果。

                    您还可以创建别名来获取和写入剪贴板,让您可以像在 Mac 上一样使用“pbcopy”和“pbpaste”。就我而言,当我使用 Z shell (zsh) 时,我的别名文件中有这个:

                    (( $+commands[xclip] )) && {
                        alias pbpaste='xclip -i -selection clipboard -o'
                        alias pbcopy='xclip -selection clipboard'
                    }
                    

                    Z shell 中的(( $+command[name] )) 测试您的系统上是否安装了命令“name”,然后将两个别名与{} 组合在一起。 &amp;&amp; 是一个二进制AND;如果 a 则 b,因此如果您有 xclip,则将设置别名。

                    echo "another test" | tee >(pbcopy)
                    

                    要获取剪贴板内容,只需键入:

                    pbpaste | "any-command-you-need-here"
                    

                    【讨论】:

                      【解决方案25】:

                      在 Linux 中这是可行的:

                      cat filename | xclip
                      

                      【讨论】:

                      • 但之前的答案已经涵盖了(?)。
                      【解决方案26】:

                      pbcopy 内置于 OS X:

                      复制文件.bash_profile的内容:

                      cat ~/.bash_profile | pbcopy
                      

                      【讨论】:

                        【解决方案27】:

                        Ruby oneliner 激励我尝试使用 Python。

                        假设我们想要一个将剪贴板中的任何内容缩进四个空格的命令。它非常适合在 StackOverflow 上共享 sn-ps。

                        $ pbpaste | python -c "import sys
                         for line in sys.stdin:
                           print(f'    {line}')" | pbcopy
                        

                        这不是错字。 Python 需要换行符来执行 for 循环。我们希望一次更改行数,以避免在内存中建立额外的数组。

                        如果您不介意构建额外的数组,请尝试:

                        $ pbpaste | python -c "import sys; print(''.join([f'    {l}' for l in sys.stdin]))" | pbcopy
                        

                        但老实说,awk 在这方面比 python 更好。我在~/.bashrc 文件中定义了这个别名

                        alias indent="pbpaste | awk '{print \"    \"\$0}' | pbcopy"
                        

                        现在,当我运行 indent 时,剪贴板中的任何内容都会缩进。

                        【讨论】:

                        • 您可以去掉括号并使用生成器表达式而不是列表推导式。 ''.join(f' {l}' for l in sys.stdin)——对于大多数人来说,python 将指向 MacOS 上的 python2。因此,您可能需要指定 python3
                        • 什么是“Ruby oneliner”?你指的是什么?另一个答案?或者是其他东西?请通过editing (changing) your answer 回复,而不是在 cmets 中(without "Edit:"、"Update:" 或类似的 - 答案应该看起来像是今天写的)。
                        【解决方案28】:

                        Wayland 上,xcopy 似乎不起作用。请改用wl-clipboard

                        例如,Fedora:

                        sudo dnf install wl-clipboard
                        
                        tree | wl-copy
                        
                        wl-paste > file
                        

                        【讨论】:

                          【解决方案29】:

                          此函数将测试剪贴板存在并使用它。

                          验证复制粘贴到你的shell,然后调用函数clippaste

                          clippaste () {
                              if [[ $OSTYPE == darwin* ]]
                              then
                                      pbpaste
                              elif [[ $OSTYPE == cygwin* ]]
                              then
                                      cat /dev/clipboard
                              else
                                      if command -v xclip &> /dev/null
                                      then
                                              xclip -out -selection clipboard
                                      elif command -v xsel
                                      then
                                              xsel --clipboard --output
                                      else
                                              print "clipcopy: Platform $OSTYPE not supported or xclip/xsel not installed" >&2
                                              return 1
                                      fi
                              fi
                          }
                          

                          【讨论】:

                            【解决方案30】:

                            我刚刚在 KDE 环境中搜索了相同的内容。

                            请随意使用clipcopyclippaste

                            KDE:

                            > echo "TEST CLIP FROM TERMINAL" | clipcopy
                            > clippaste
                            TEST CLIP FROM TERMINAL
                            

                            【讨论】:

                              猜你喜欢
                              • 2013-09-23
                              • 1970-01-01
                              • 1970-01-01
                              • 2021-09-11
                              • 2023-03-16
                              • 2013-03-30
                              • 1970-01-01
                              相关资源
                              最近更新 更多