読者です 読者をやめる 読者になる 読者になる

tempwork: テンポラリディレクトリでコマンドを実行するコマンド

テンポラリディレクトリを作って、その中で作業して、テンポラリディレクトリを消す…というスクリプトを年間に百回ぐらい書いている気がしたので、うまくラッピングしてくれるtempworkというコマンドを書きました。

github.com

Usage: tempwork command...

tempworkに続いてコマンドを並べると、テンポラリディレクトリを自動的に作成し、そこに移動してからコマンドを実行して、終わったらテンポラリディレクトリを削除します。

$ tempwork bash -c 'pwd; date > tmp.txt; ls ; cat tmp.txt'
# ↓作成されたテンポラリディレクトリ
/private/var/folders/xc/phct0zx57cgc4z07mkt7pp8w0000gp/T/tempwork859985632
tmp.txt # ←テンポラリディレクトリに作成したファイル
Sat Sep  3 18:38:24 JST 2016 # ←ファイルの中身

$ ls /private/var/folders/xc/phct0zx57cgc4z07mkt7pp8w0000gp/T/tempwork859985632
# ↓コマンドが終了したら、テンポラリディレクトリは削除される
ls: /private/var/folders/xc/phct0zx57cgc4z07mkt7pp8w0000gp/T/tempwork859985632: No such file or directory

いままでシェルスクリプトの中でmktemp -dを実行して変数に保存してcdして、コマンドが終了したら削除して…とかやっていたんですが、tempworkを使うとtempwork ./script.shでその辺をいい感じにしてくれます。

$ echo -e '#!/bin/sh\npwd\necho hello' > tmp.sh
$ chmod +x tmp.sh
$ tempwork ./tmp.sh
/private/var/folders/xc/phct0zx57cgc4z07mkt7pp8w0000gp/T/tempwork037699548
hello

どうぞご利用ください。

追記

shebangで使えるようにした。

$ cat ./tmp.sh
#!/usr/bin/tempwork /bin/bash
echo hello
pwd

$ ./tmp.sh
hello
/private/var/folders/xc/phct0zx57cgc4z07mkt7pp8w0000gp/T/tempwork708816166