シェルスクリプトでクリップボードの監視をしてみる

Bash, Linux, Mac

はじめに

技術調査のためにひたすら参考になるキーワードをコピペしていましたが、自動的にテキストファイルに吐き出したかったのでスクリプトを書いてみました。

デフォルト状態ではMacで用意されているpbcopy/pbpasteコマンドで動作しますが、同等のコマンド名を引数で渡してやればLinuxやCygwinでも動作します。

検証環境

$ uname -moi
x86_64 MacBookPro11,4 Darwin

$ bash -version | head -n 1
GNU bash, バージョン 5.0.11(1)-release (x86_64-apple-darwin18.6.0)

スクリプト

watch_cb.sh という名前で作成しました。

クリップボードの内容が変わったタイミングで出力が行われます。

#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o noclobber

COMMAND_TO_COPY="${1:-pbcopy}"
COMMAND_TO_PASTE="${2:-pbpaste}"

echo '' \
  | "${COMMAND_TO_COPY}"

PRE_CLIP=
while :; do
  CLIP="$(${COMMAND_TO_PASTE})"
  if [[ ${PRE_CLIP} != "${CLIP}" ]]; then
    # ---- Event occurs ----
    PRE_CLIP="${CLIP}"
    echo "${PRE_CLIP}"
  fi
  sleep 1
done

実行方法

# コンソール上に表示するだけ
$ ./watch_cb.sh

# ファイルにも保存したい
$ ./watch_cb.sh | tee memo.txt

# 追記
$ ./watch_cb.sh | tee -a memo.txt

# 特定の条件に合致したものだけに絞り込む
$ ./watch_cb.sh | grep https | tee memo.txt

ひとこと

イベント発生部分を汎用化させれば、もっと色々できそう。

Bash, Linux, Mac