ジョークのシェル環境 - 実行コマンドをTwitterに垂れ流す

まとめ

  1. 引数またはstdinから渡された内容を呟く、tweetコマンドをつくったよ
  2. bashのDEBUGシグナルをトラップすると、コマンド実行前に何かしらの処理をできるよ
  3. 1と2を組み合わせて、実行するコマンドを逐一Twitterにつぶやくシェル環境を実現したよ

1.
引数の内容、または標準入力から受け取った内容を呟く、tweetコマンドを作りました。こんな感じです。

$ tweet "foo bar" # 引数をつぶやく
$ echo " tweet this" | tweet # 標準入力から受け取ってつぶやく

2.
bashにはDEBUGというシグナルが用意されており、これをTRAPすることで、
シェルでコマンドを実行する前に、何かしらの処理ができます。

$ preexec () { echo "$@"; }
$ preexec_invoke_exec () { 
>    [ -n "$COMP_LINE" ] && return  # do nothing if completing;
>    local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`;
>    preexec "$this_command";
> }
$ trap 'preexec_invoke_exec' DEBUG
$ pwd
13/05/13 23:39:11 pwd
/home/myuser

3.
2つを組み合わせて、実行するコマンドすべてをTwitterにたれながすシェル環境を作りました。
あらかじめ用意したシェルスクリプトを評価すると垂れ流し始めます。

こんな感じに。

$ cat hook_command_and_tweet.sh
# シェルでコマンドを実行する度につぶやく。
preexec () { tweet "$@"; }
preexec_invoke_exec () { 
    [ -n "$COMP_LINE" ] && return  # do nothing if completing;
    local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`;
    preexec "$this_command";
}
trap 'preexec_invoke_exec' DEBUG
$ . hook_command_and_tweet.sh 
$ less sandbox/latest.txt
$ cd radikorec
$ . bin/activate
$ radikorec --duration 1 --directory archive --prefix 'RADIO-NIKKEI-1'
$ . nohook.sh