Corredor

ウェブ、プログラミングの勉強メモ。

Linux Ubuntu でも「コマンドラインでクリップボードにコピー」を実現する

Windows の場合は clip.exe、MacOS の場合は pbcopy という OS 標準搭載のコマンドを使うことで、文字列をコマンドラインからクリップボードにコピーできる。

コレと同様のことを Ubuntu 18.04 デスクトップ環境でも実現してみる。

xclip をインストールする

Linux デスクトップでクリップボードへのコピーを行うには、xclip というツールを使う。

Ubuntu 18.04 環境で試した限り、標準ではインストールされていなかったので、apt でインストールしておく。

$ sudo apt install -y xclip

使ってみる

xclip コマンドをインストールしたら、以下のように使える。

$ echo 'TEST!' | xclip -selection c

コレでクリップボードにコピーできる。

クリップボードの内容を出力、すなわち「ペースト」するには、次のようにコマンドを打つ。

$ xclip -selection c -o

コレが、MacOS における pbpaste コマンドと同等の動きとなる。

なお、Windows は clip.exe によるコピー機能はあるが、ペースト用コマンドが標準では存在しない。以下の pasteboard というツールをインストールすれば、pbpaste.exe が使えるようになる。

# Chocolatey でもインストール可能
PS1> choco install pasteboard

余談まで。

エイリアスを作る

xclip コマンドはクリップボードにコピーする際にどうしてもオプションの記述が必要になるので、多用する時は少々面倒臭い。そこで、MacOS のコマンド名に合わせて、エイリアスを作ってやろう。

Windows の場合も含めて、.bashrc に次のように記述しておけば、全ての OS で pbcopypbpaste コマンドが使える寸法だ。

if [ "$(uname)" == 'Darwin' ]; then
  # MacOS の場合 : 標準の pbcopy・pbpaste を使用するので何もしない
  :
elif  [ "$(uname)" == 'Linux' ]; then
  # Linux の場合 : xclip がインストールされていればそれを使用してエイリアスを用意する
  if type xclip > /dev/null 2>&1; then
    alias pbcopy='xclip -selection c'
    alias pbpaste='xclip -selection c -o'
  fi
else
  # Windows の場合 : pbcopy.exe や pbpaste.exe が存在しなければエイリアスを用意する
  if ! type pbcopy.exe > /dev/null 2>&1; then
    alias pbcopy='cat > /dev/clipboard'
  fi
  if ! type pbpaste.exe > /dev/null 2>&1; then
    alias pbpaste='cat /dev/clipboard'
  fi
fi

コレで、どの OS でも pbcopypbpaste コマンドが動くようになった。

Windows の場合で、以下のように nkf を使って Shift-JIS に変換したら clip.exe が使えるかな、と思ったのだが、貼り付け時にも文字コード変換が必要になるので、あまり意味がないなと思って捨てた。

$ echo '文字列' | nkf -s | clip.exe