背景
Mac では pbcopy
コマンドでクリップボードの内容を設定できます。スクリプトの結果をクリップボードにコピーするなど、コマンドラインでクリップボードを扱うときに便利です。
pbcopy
と同じように、GNU Screen の paste buffer を設定するコマンドがあると便利だと考えました。
screen の paste buffer は readbuf コマンドで設定する
screen
の paste buffer は readbuf コマンド で設定できます。
screen.readbuf という関数にまとめた
以下の関数を作成しました。これを .bashrc
などに書いておきます。
.bashrc
function screen.readbuf
{
if [[ "${STY:-}" == '' ]]; then
echo 'Not in screen.' >&2
exit 1
fi
# 一時ファイルのパス.
declare -r exchange_file_path='/tmp/screen-exchange'
if [[ -p /dev/stdin ]]; then
# パイプ経由で実行された場合は, その内容を一時ファイルに書き出す.
cat > "${exchange_file_path}"
elif [[ $# == 0 ]]; then
echo 'File not specified.' >&2
exit 1
else
# ファイルが指定された場合は, その内容を一時ファイルに書き出す.
cat "$@" > "${exchange_file_path}"
fi
# 一時ファイルの内容を paste buffer に読み込む.
screen -S "${STY}" -X readbuf "${exchange_file_path}"
# 一時ファイルを削除する.
rm "${exchange_file_path}"
}
次のように呼び出すことで screen
の paste buffer を設定できます。
# ファイルの内容を paste buffer に設定する.
$ screen.readbuf /path/to/file
# 他のコマンドの結果を paste buffer に設定する.
$ echo 'Hello' | screen.readbuf
screen
にスクリプトからコマンドを送る方法は screen のカレントディレクトリをココに変更する の screen.chdir の解説 を参照ください。