0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

screen の paste buffer をスクリプトで設定する

Posted at

背景

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 の解説 を参照ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?