Bashスクリプトのクリップボードとの間のパイプ


946

Bashでクリップボードとの間でパイプ接続することはできますか?

デバイスハンドルとのパイプ接続であれ、補助アプリケーションの使用であれ、何も見つかりません。

たとえば/dev/clip、デバイスがクリップボードにリンクしている場合、次のことができます。

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

3
私は:%y+vimで使用してきました。これは、「すべての行を「+」レジスタ(X PRIMARYクリップボード)にヤンク(コピー)する」というvim-speakです。%具体的にしたい場合は、範囲で置き換えることができます。ただし、3つの注意点があります。1.コピーする前に、テキストをファイルに保存する必要があります。これはxclip、回答で述べられているコマンドとは対照的です。2. vimの方法がわからない場合、これは退屈な作業になる可能性があります。3.これは、vimのコンパイル時に特定の機能が有効になっている場合にのみ実行できます。GVimをインストールする場合、vimのGUIと端末インスタンスの両方でデフォルトで有効になっているはずです。
Braden Best

1
@BradenBestあなたはこれを答えとして入れるべきです。NIX環境でインストールできませんでしたxclip。あなたの答えは魅力のように働きました。
HankCa、2017年

@HankCaさて、私は答えを投稿しまし。あなたの考えを教えてください。
ブレーデンベスト2017

@BradenBestは非常に包括的な答えです。私はちょうど:%y+1つが好きだったが、大丈夫、あなたはすべての拠点をカバーしました!いいね。
HankCa

別のオプション:小さなperlスクリプトを使用:インストールは必要ありません。以下の私の答えを参照しください。
VonC 2017

回答:


863

あなたが扱うことができる豊富なクリップボードがあります。Xウィンドウのプライマリクリップボードにデータを入れたいLinuxユーザーだと思います。通常、会話したいクリップボードには、会話できるユーティリティがあります。

Xの場合は、xclip(およびその他)があります。ほとんどのアプリケーションxclip -selection cCtrl + CCtrl + Vで動作するクリップボードにデータを送信します。

Mac OS Xを使用している場合は、がありpbcopyます。

Linuxターミナルモード(Xなし)の場合は、クリップボードがある画面gpmまたは画面を調べます。screenコマンドを試してくださいreadreg

Windows 10以降またはcygwinでは、/dev/clipboardまたはを使用しますclip



24
Windowsでは、/dev/clipboardMsys / MinGW bashシェルでも動作します
Mihai

71
xclip -selection c、ほとんどのアプリケーションで^ C、^ Vで動作するデータをクリップボードに送信することに注意してください
Klaas van Schelven

31
新しいWindowsバージョンであなただけ使用することができますclip。このようにdir | clip
maep

11
GNU / Linuxにはのようなデバイス/dev/clipboardがなく、デフォルトで少なくともKubuntu に存在しない xclipまたはgpmのいずれかをインストールすることを強制するのは悲しいことです(他のほとんどのディストリビューションでもそうです)
Hi-Angel

282

あなたが使用していることを確認してくださいalias xclip="xclip -selection c" それ以外の場合は、あなただけに使用することはできませんCtrl+ vバック別の場所に貼り付けします。

echo test | xclip    

Ctrl+v === test


1
そのコマンド引数なしでどうやって貼り付けますか?
ジョナ

15
xclip -selection clipboard -o
ダグ2013

32
私はosxとlinuxの間を何度も行き来しているので、私のドットファイルには次のものが含まれています。alias pbcopy="xclip -selection c" alias pbpaste="xclip -selection clipboard -o" お役に立てば幸いです。
ダグ2013

15
@ApockofFork xclipは改行を追加していませんecho。お試しくださいprintf test | xclip -i -selection clipboard。(printf記述しない限り、改行は追加されません'test\n'。)
David X

7
またはのecho -n代わりに使用しますprintf
クリスチャンピエッシュ2015

182

インストール

# You can install xclip using `apt-get`
apt-get install xclip

# or `pacman`
pacman -S xclip

# or `dnf`
dnf install xclip

apt-getまたはpacmanにアクセスできない場合dnf、ソースは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インスタンスを再起動することを忘れないでください。

使用法

これでsetclipandを使用できますgetclip。例:

$ echo foo | setclip
$ getclip
foo

3
他のすべてのディストリビューション:sourceforge.net/projects/xclip
Scz

+1最高のソリューション!アーチで、sudo pacman -S xclip。しかし、それ.bashrcが最良の場所ではないことに注意してください。エンドユーザーが適切なbashrc、bash_aliases、および.profileファイルを読み、bashがそれぞれをどのように処理するかを読むことをお勧めします。ヒント:代わりに.bash_aliasesに入れてください。
eduncan911 2015

1
ありがとう@ eduncan911!:) pacmanパッケージマネージャーを使用するオプションを追加し、.bashrc提案を削除しました。私.bash_aliasesはもっと適応されていることを知っていますが、最終結果は同じです(存在.bashrcする.bash_aliases場合は単に必要です)。乱雑なシステムが必要な場合は、システムを用意してください。:)
tleb '19

@EladTabakハッピーそれは助けた。
2017

1
@jpaugh正解です。最後に私の.bashrc情報源.bash_aliases。;)私はアーチは、Ubuntu / Debianの間で100%互換性のあるまま、この古い慣習に従う、ラズベリーは、MacOSの/ OSXとWindowsのバッシュをバリアント:stefaanlippens.net/my_bashrc_aliases_profile_and_other_stuff その大会で、私はマシンのすべてにわたって正確に同じドットファイルを使用しますさわる。それはかなりいいです:github.com/eduncan911/dotfiles
eduncan911

143

macOSでは、組み込みコマンドpbcopypbpasteコマンドを使用します。

たとえば、実行すると

cat ~/.bashrc | pbcopy

+ ショートカット~/.bashrcを使用すると、ファイルの内容を貼り付けることができます。Cmdv



25

Debian / Ubuntu / Mintのxsel

# append to clipboard:
cat 'the file with content' | xsel -ib

# or type in the happy face :) and ...
echo 'the happy face :) and content' | xsel -ib

# show clipboard
xsel -b

# Get more info:
man xsel

インストール

sudo apt-get install xsel

これはどう違いますecho "foo" | xclip -selection cか?
レオ・レオポルド・ヘルツ준 영

そここの上でいくつかの回答をしている依頼Ubuntuの答えは、しかし、主xselxclipことを除いてあらゆる方法で等価ですxclip名前で/書き込みファイルを読み取ることができますが、xselあなたは、ファイルにアクセスしたい場合は、シェルのリダイレクトが必要です。
コリンDベネット

xselはスクリプトからうまく機能していxclip ますが、はプロンプトからのみ機能しています。なぜだかわかりません。
NVRM

16

わあ、この質問にはいくつの答えがあるのか​​信じられません。すべてを試したとは言えませんが、上位3または4を試してみましたが、どれもうまくいきませんでした。私にとってうまくいったのは、dougというユーザーが書いたコメントの1つにある回答でした。私はそれがとても役に立ったと思ったので、答えで言い直すことにしました。

xcopyユーティリティをインストールし、ターミナルで次のように入力します。

コピーする

Thing_you_want_to_copy|xclip -selection c

ペースト

myvariable=$(xclip -selection clipboard -o)

私はpbpasteとpbcopyを推奨する多くの回答に気づきました。これらのユーティリティを使用しているが、何らかの理由でリポジトリで使用できない場合は、xcopyコマンドのエイリアスを作成して、pbpasteおよびpbcopyと呼ぶことができます。

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

したがって、それは次のようになります。

Thing_you_want_to_copy|pbcopy
myvariable=$(pbpaste)

エイリアス部分はMacOSに非常によく対応しています。
MeadowMuffins 2017

15

2018年の回答

clipboard-cliを使用します。macOS、Windows、Linux、OpenBSD、FreeBSD、Androidで問題なく動作します。

それをインストールします:

npm install -g clipboard-cli

その後、行うことができます

echo foo | clipboard

あなたがしたい場合は、することができますエイリアスにcb自分の中で次のように置くことによって.bashrc.bash_profileまたは.zshrc

alias cb=clipboard


2
安全なnpmパッケージでよろしいですか?
ジョニー

3
@Stas、私はそう願っています。最も多作なノード寄稿者であるSindresorhus(github.com/sindresorhus)によって作成されています。彼は、Avaテストライブラリ、xo linter、Yeoman、およびその他の無数のプロジェクトを担当しています。彼はまた、このような数え切れないほどの小さなライブラリの責任者でもあり、インターネット上のほとんどすべてのJSを使用するWebサイトにコードをまとめて配置しています。それは彼が妥協することができなかったと言っているのではありません。彼のリポジトリと彼自身の評判への注目の量は、ほとんどのランダムなnpmリポジトリよりもはるかに可能性が低くなるだけです。
エヴァンコンラッド

涼しい!xclipが機能していないUbuntu GNU / Linuxでの作業。
Kevin Buchs

14

LinuxのWindowsサブシステムでは、clip.exeを使用してクリップボードにコピーできます。

cat file | clip.exe

|pipeコマンドを使用することを覚えておいてください。そして>、それは機能しないので、コマンドではありません。


11

これは、複数のプラットフォームで動作するクリップボードを読み取るための、すぐに使用できる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 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

ああ、これは実際に機能するのはなぜこれが答えではないのですか?
255.tar.xz

9

(Cygwinの付き)は、Windows上で試す cat /dev/clipboardecho "foo" > /dev/clipboardで述べたように、この記事。


1
ユーザー@maepが別のコメントで述べたように、新しいバージョンのWindows(Win10の場合にのみ確認できます)は単純ににパイプできclipます。私はmsysgit 1.9.5を使用していますが、これはうまくいきました。
Shawn Erquhart、2015

echo "foo" > /dev/clipboard改行を完全に破壊するようです(\ r \ n \ nものではなく、完全になくなっています)
user1529413

9

Macのみ:

echo "Hello World" | pbcopy
pbpaste

これらはに/usr/bin/pbcopyあり/usr/bin/pbpasteます。


8

Linuxにはさまざまなクリップボードがあります。Xサーバーには1つあり、ウィンドウマネージャーにはもう1つある可能性があります。標準デバイスはありません。

そうです、CLIでは、Emacsviなどの他のアプリケーションと同様に、画面プログラムにも独自のクリップボードがあります。

Xでは、xclipを使用できます

このスレッドで他の可能な回答を確認できます:http : //unix.derkeiler.com/Newsgroups/comp.unix.shell/2004-07/0919.html


2
/ dev / clipを作成するのは誰かにとって良いプロジェクトのように思えます。
TED

2
複数のクリップボードを完全に認識しています。これにより、私の質問への回答が困難になるのはなぜですか?
モイヌディン2009

クリップボードが標準化されていれば意味があり、/ dev / clip1、/ dev / clip2 .. / dev / clip <n>を使用してそれらにアクセスできれば問題はないでしょう。唯一の問題は、それらがユーザー固有であり、デバイスはシステム全体に適用されます。ただし、アクセスするUIDに応じてマスクするカーネルデバイスドライバーを作成すると、期待どおりに動作するはずです。

5

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でクリップに入れる)も存在します。


4

これは、必要なことだけを実行する単純な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 |
                ||     ||

単独で実行すると、クリップボードの内容が出力されます。


これは、1台のコンピューターを使用している場合に機能しますが、コンピューター間でコピーすることはできません。
Charles Plager

`echo str> tmpfile`のみで cat tmpfile、クリップボード操作ではないようです。// @hortaの回答と同じ。
yurenchen '26 / 09/26

これはクリップボード変数を設定していないようなので、他のアプリケーションにコンテンツを貼り付けることはできません-これは実際のクリップボードではありません!
イエナ2018年

4

私は良い参照を見つけました:https : //unix.stackexchange.com/questions/69111/

私の場合、コンテンツをクリップボードに貼り付け、そこに貼り付けられているものも確認したいのでtee、ファイル記述子を指定してコマンドも使用しました。

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

>()プロセス置換の形式です。bashは、それぞれを括弧内のプログラムの標準入力に接続されているファイル記述子へのパスに置き換えます。

teeコマンドは、「パイプその内容」にあなたをできるようにあなたのコマンドをフォークし、標準出力「標準出力」の結果を参照してください

また、エイリアスを作成してクリップボードで取得および書き込みを行うこともできます。これにより、「pbcopy」および「pbpaste」をMACの場合と同じように使用できます。私の場合、私はzshを使用しているので、これを私のエイリアスファイルに持っています:

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

(( $+command[name] ))zshのテストでは、コマンド「名前は」システムにインストールされている場合、両方の別名がでグループ化されています{}。これ&&はバイナリANDであり、aの場合はb、したがってxclipがある場合はエイリアスが設定されます。

echo "another test" | tee >(pbcopy)

クリップボードのコンテンツを取得するには、次のように入力します。

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


2

私が数年前に書いたいくつかのWindowsプログラム。クリップボードをダンプ、プッシュ、追加、印刷できます。それはこのように動作します:

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

ソースコードが含まれています:cmd_clip.zip


2

いくつかの方法があります。言及されているいくつかの方法には、(私が思うに)tmux、screen、vim、emacs、およびシェルが含まれます。emacsもscreenもわからないので、他の3つについて説明します。

Tmux

Xの選択ではありませんが、tmuxにはコピーモードがありますprefix-[(デフォルトでprefixCtrl+ Bです)。このモードで使用されるバッファはtmux専用であり、かなりの可能性を開き、適切な状況でのX選択よりも用途が広くなります。

このモードを終了するには、を押しqます。ナビゲートするには、vimまたはemacsバインディング(デフォルト= vim)を使用してhjkl、移動、v/V/C-v文字/行/ブロックの選択などを行います。選択が完了したら、Enterコピーしてモードを終了します。

このバッファから貼り付けるには、を使用しますprefix-]

シェル

任意のインストールは、X11デフォルトで二つのプログラムが付属しているようだxclipxsel(ちょっと、それはまた、両方が付属していますかのようにstartxしてxinit)。他の回答のほとんどはに言及してxclipおり、xselその簡潔さのために私は本当に好きなので、カバーしxselます。

XSEL(1回)

入力オプション

-a、-append

選択に標準入力を追加します。-iを意味します

-f、-follow

標準入力の増加に応じて選択に追加します。-iを意味します

-i、-input

選択に標準入力を読み込みます。

出力オプション

-o、-output

選択範囲を標準出力に書き込みます。

アクションオプション

-c、-clear

選択を解除します。すべての入力オプションをオーバーライドします。

-d、-delete

現在の選択の削除を要求します。これにより、選択がクリアされるだけでなく、選択が存在するプログラムに対して、選択されたコンテンツを削除するように要求されます。すべての入力オプションをオーバーライドします。

選択オプション

-p、-primary

PRIMARY選択を操作します(デフォルト)。

-s、-secondary

SECONDARYセレクションを操作します。

-b、-clipboard

クリップボードの選択を操作します。

そして、それはあなたが知る必要があるすべてについてです。p(または何も)for PRIMARYsfor SECONDARYbfor CLIPBOARDofor output。

例:fooTTYからの出力をコピーして、バグレポートのウェブページに貼り付けたいとしましょう。これを行うには、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

ピザの注文は、コマンドラインの生産的な使用のようです。

...次に進みます。

Vim

+clipboard(これは重要です!を確認してくださいvim --version)でコンパイルした場合、VimはX PRIMARYおよびCLIPBOARD選択にアクセスできるはずです。2つの選択はそれぞれ*+レジスタからアクセス可能であり、他のレジスタと同じように、自由に読み書きできます。例えば:

:%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`

いくつかの主要なコンボをバインドし、あなたは良いはずです。


DISPLAY=X以外の環境からXアプリケーションを呼び出すときは、必ず使用することを忘れないでください。Xアプリケーションは、DISPLAYどのサーバー(または複数のセッションを処理するサーバーが1つしかないのか)を把握するために環境変数が必要です。たとえば、TTYからDISPLAY=:1 firefox(またはディスプレイIDが何であれ、私のIDはたまたまです:1)を試してください。
ブレーデンベスト2017

私の環境での選択:%y+はVIMでした。
HankCa、2017年

2

このスレッドから、gclip/ xclip/ /をインストールする必要のないオプションがありますxselサードパーティ製のソフトウェアが。

perlスクリプト(perlは通常常にインストールされるため)

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

これはどのように使用しますか?スクリプトをPATHに保存し、それにパイプしますか?Dropbox CLIラッパーを作成して共有リンクをコピーしようとしているので、テキストを処理するためだけに必要です。
イエナ2018年


2

pbcopyはOSXに組み込まれています。

.bash_profileの内容をコピーする:

cat ~/.bash_profile | pbcopy

1

macOSでは、 pbpaste

例えば:

クリップボードを更新する

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

1

私と同じように、root権限なしでLinuxサーバー上で実行し、xclipまたはGPMがない場合は、一時ファイルを使用するだけでこの問題を回避できます。例えば:

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

ルート権限の欠如がこれにどのように影響するかはわかりません。
ブレーデンベスト

3
@BradenBest root権限がないため、インストールできませんでした。
horta 2017年

しかし、何をインストールしますか?バツ?サーバー上?奇妙なX転送サービスをホストしているのでなければ、なぜそれをしたいのかわかりません。
ブレーデンベスト

@BradenBestわかりません。どのようなプログラムやサービスでも、コピーペーストを実行できます。
horta 2017年

1
さて、X selections(「クリップボード」とxclip / xselの言及によって必ず暗示される)のいずれかを使用している場合は、アクティブなXセッション(したがってXサーバー)が必要です。これにより、最初の場所。私の意味を確認するには、DISPLAY="" xselローカルマシンで実行してみてください。エラーで終了し、セッションが見つからないため""、Xの選択との対話は行われません。そのため、私は最初に、ルート権限がこれにどのように影響するかはわかりません。ルートまたはルートなしの場合、サーバー環境でXの選択が役立つとは思わないでしょう。
Braden Best




0

1年以上後ですが、少し異なる解決策を共有します。これが誰かに役立つことを願っています。

昨日、「異なるユーザーセッション間でクリップボードを共有するにはどうすればよいですか?」という質問に気付きました。ctrlaltF7- でセッションを切り替える場合ctrlaltF8で、実際には、コピーしたものを貼り付けることはできません。

私は名前付きパイプに基づいて、次の迅速で汚い解決策を思いつきました。それは確かにかなり裸で生ですが、私はそれが機能しているのを見つけました:

user1@host:~$ mkfifo /tmp/sharedClip

その後、送信端末で

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

最後に、受信端末で:

user2@host:~$ cat /tmp/sharedClip

これで、最初のターミナルに何かを入力または貼り付けると、(を押した後return)受信ターミナルにすぐに表示され、そこから好きな場所にもう一度コピー/貼り付けできます。

もちろん、これはuser1のクリップボードからコンテンツを厳密に取得してuser2のクリップボードで利用できるようにするだけでなく、貼り付けとコピーの追加のペアのクリックを必要とします。


それほど驚くべきことではないようです。2つの異なるXサーバー= 2つの異なる選択セット。ただし、を介して入出力を行うスクリプトを設定することもできますxsel/xclip。たとえば、一方の端は、選択のいずれかが変更されたかどうかを確認し、それを(名前付きFIFOを介して)自動的に他のスクリプトにパイプします。スクリプトは、1つ以上のパイプをリッスンしており、それを独自のX選択に挿入します。したがって、テキストをコピーすると、同じテキストが他のXセッションの選択に自動的に表示されます。そして、忘れないでください$DISPLAY
ブレーデンベスト2017

0

ルビーのワンライナーは私にpythonを試すように促しました。

クリップボードの内容を4つのスペースでインデントするコマンドが必要だとします。Stackoverflowでスニペットを共有するのに最適です。

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

それはタイプミスではありません。Pythonはforループを実行するために改行を必要とします。メモリ内に余分な配列が作成されないように、1回のパスで行を変更します。

追加の配列を作成してもかまわない場合は、以下を試してください。

$ 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クリップボードにあるものを実行すると、インデントされます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.