導入―いかに被害なくうざいいたずらをするか
PCをログアウトせずに席を立ってしまった人に対していたずらをするというのは、誰しも考えたことがあるでしょう。しかし、実際には被害を出さずにいたずらを完遂するのは以外と大変です(被害というのはファイルの増加等も含みます)。一方で、単にls
をエイリアスにする程度ではいたずらとしては面白くない。そこで、被害を出さずに如何にうざいいたずらをするか、というのが今回の話題です。
尚、プログラマに対して行ういたずらであるのと個人的な好みから、いたずらはシェルで行います。
say
コマンドと無限ループ
Mac限定ですが、say
というコマンドがあります。これは引数を音読してくれるコマンドですが、これを無限ループと組み合わせるととてもうざいのではないか?と思いつきました。
while true; do say 'This is a joke.'; done;
バッググラウンドジョブにする
しかし、この単純な方法ではフォアグラウンドでジョブが走ってしまうために見つかりやすく、またシェルでCtrl-C
で終了してしまうため、持続性にも欠けます。
そこで、コマンド末尾に&
を付けることで、バッググラウンドで走らせます。
while true; do say 'This is a joke.'; done; &
nohup
まだ問題があります。zshを使っている場合、バッググラウンドジョブがある状態でシェルを閉じることができません。これではシェルを閉じていたずらを隠蔽することができませんね。
そこで、nohup
を使います。
nohup `while true; do say 'This is a joke.'; done; &`
ここでの注意点は、nohup
の引数はバッククォートであるということです。
シェルを閉じて完成
これでシェルが閉じられます。別タブでシェルを開いてそこでコマンドを実行後、タブを閉じれば証拠は残らず、後ろではひたすら'This is a joke.'の音声が流れ続けます。これはうざい。
対処法
プロセスをkill
すればいいと思ったのですが、なんと無限ループのたびにPIDが変わるため、そう単純には行きません。ではどうすればいいのか…それはご自分で考えてくださいね。