クリップボードに関してはコマンドライン上でのクリップボードの利用方法をご覧ください。
話を始める前に注意ですが、今回の内容はあくまで練習用であって、成果物を実際に使用することはおすすめしません。
上記内容を踏まえた上で話を進めます。
今回作成したいコマンドは tty-copy と tty-paste になります。
tty-copyは文字列をクリップボードに保存の処理になり、
$ tty-copy hoge
のように文字列をクリップボードに保存します。
tty-pasteはクリップボードの保存された値を貼り付ける処理になり、
$ tty-paste > paste.txt $ cat paste.txt
hoge
と出力されることを目標にします。
クリップボードを自作する上で注意すべき事として、
・クリップボードに保存した文字列を他のユーザが読み込むことが出来ないようにする
・再起動した時にクリップボードには何も残っていないようにする。
があります。
この2つの項目を解消するコマンドとして、mktemp があります。
mktemp は一意な名前の一時ファイルを簡単に作成するためのコマンドです。
一時ファイルとは、プログラムの実行中に一時的にデータを保存するためのファイルで、通常、プログラムが終了すると削除されます。
mkempを試してみます。
$ mktemp
/tmp/tmp.1hWlR3JNwC
上記のパスで一時ファイルが生成されました。
一時ファイルの権限を調べてみますと、
$ ls -l /tmp/tmp.1hWlR3JNwC
-rw------- 1 pi pi 0 Dec 2 12:00 /tmp/tmp.1hWlR3JNwC
作成したアカウントにのみ、読み込み(r)と書き込み(w)の権限が付与されていました。
今回作成されたファイルですが、システムディレクトリの /tmp 以下に生成されていました。
/tmp ディレクトリは、Linux システムにおいて、一時的なファイルを保存するための領域になります。
プログラムの実行中に一時的に生成されるファイルや、ユーザーが一時的に保存したいデータを置くために使用されます。
/tmp ディレクトリにファイルを作成する最大の利点は、システム再起動時に削除されるということがあります。
先程挙げましたクリップボードの2つの要件を、mktemp のみで解消することができることがわかりました。
.bashrcの末尾に下記のコードを追加します。
$ cd ~ $ micro .bashrc
export CLIPBOARD if [ -z CLIPBOARD ]; then CLIPBOARD=$(mktemp) readonly CLIPBOARD fi tty-copy(){ echo -n $1 > $CLIPBOARD # 下記コマンドはデバック用 echo "copied "$CLIPBOARD } tty-paste(){ # 下記コマンドはデバック用 echo "from "$CLIPBOARD cat $CLIPBOARD echo }
.bashrcを保存後、
$ source .bashrc
でBashの再起動を行った後に
$ tty-copy hoge $ tty-paste > paste.txt $ cat paste.txt
を試してみます。
paste.txt内に
hoge
の文字列の確認ができれば良いです。
export CLIPBOARD if [ -z CLIPBOARD ]; then CLIPBOARD=$(mktemp) readonly CLIPBOARD fi
上記のコードですが、
export CLIPBOARD
でシェル変数のCLIPBOARDをグローバル変数化します。
if [ -z CLIPBOARD ]; then CLIPBOARD=$(mktemp) readonly CLIPBOARD fi
は一時ファイルのパスをCLIPBOARDに代入した後にreadonlyで以後の処理でCLIPBOARD変数を変更不可にします。
※ if文で囲うのは、何度も
$ source .bashrc
を実行できるようにするためです。
tty-copy と tty-paste の処理の詳細は省略します。