最近YouTubeでPIENのプレイ動画をよく見るので作りました
pien
の後に渡したプログラムがシグナルで死んだ場合はぴえんの歌が再生されます
github.com
なんとなくRustの勉強も兼ねてRustで書いてます。
地味にbrewでもダウンロードできるようになってます。
$ brew tap anatofuz/pien $ brew install anatofuz/pien
別途音源が必要なので音源配布サイトからダウンロードして、ホームディレクトリに.pien.mp3
で置いておくと再生されます。
実装方法
音声を流すのはafplayを雑に叩くみたいな世界観です。そぼく.....
RustでのCLIの作り方は全然解ってなかったので、いいかんじのチュートリアルを読みながら勉強しました。
肝なのは外部コマンドの終了コードの取得ですね。 Rustの場合は外部コマンドの終了コードはいい感じにパターンマッチで取得できます。
use std::process::Command; let status = Command::new("mkdir") .arg("projects") .status() .expect("failed to execute mkdir"); match status.code() { Some(code) => println!("Exited with status code: {}", code), None => println!("Process terminated by signal") }
この例だとNone
に分類されるやつらが全員シグナルで死んでるので、Noneの場合は音楽を再生すれば良いということになります。その為今回は入力で受け取ったコマンドの結果をパターンマッチし、シグナルで死んでたらafplayを実行するみたいな極めて単純な実装になってます。
こういう一発ネタみたいなコマンド作るのやはり楽しいですね。