ダメ人間の日常
例えば適当なファイルを一時的に落としてきてちょっと使ったら捨てたいだとか、そんなとき僕はよく mkdir /tmp/a; cd /tmp/a
してから何かするとかやってたんだけど、これ良くない点が色々ある。
- 一時ディレクトリに使う名前のボキャブラリが貧困な上に掃除もサボるので名前が被りまくってmkdirが中々出来ない→結果こうなる
- 後始末しないで放置も多いのでゴミファイルが増えてディスクの無駄だしパスワードや個人情報とか消すべきセンシティブな情報が含まれてると色々問題。
- 一時ディレクトリでの作業が終わったら元いた場所に戻りたいけど元いた場所が深いとこだったりすると戻るのが面倒だしそもそも何やってたか忘れてる事も…。
tmpspaceコマンドで解決だ!
そこでそんな問題を解決するために以下のような bash 関数を作って、~/.bashrc
とかに書いておくことにした。
# 一時作業用コマンド https://qiita.com/kawaz/items/2b6ef25f63a4f5300e84
tmpspace() {
(
d=$(mktemp -d "${TMPDIR:-/tmp}/${1:-tmpspace}.XXXXXXXXXX") && cd "$d" || exit 1
"$SHELL"
s=$?
if [[ $s == 0 ]]; then
rm -rf "$d"
else
echo "Directory '$d' still exists." >&2
fi
exit $s
)
}
# typoで補完が出てこないのもストレスなのでaliasも作っておくことにした
alias tempspace=tmpspace
使い方は簡単で、何か一時的な作業をしたくなったら tmpspace
と打てば良い。作業が終わったら exit
するだけだ。これにより以下のようなメリットが受けられるようになる。
- 一時ディレクトリ名を考える必要が無くなる。
-
exit
すれば元いた場所に戻れる。 -
exit
すれば一時ディレクトリも消える。 - 一時ディレクトリを残したままにしておきたければ
exit 1
とかすればOK。- 残った一時ディレクトリのパスも復帰時に表示してくれる。
- 大事な作業中ファイルがある状態で異常終了(sshが切れた等)した場合は自動クリーニングされない。
- 一時ディレクトリは
chmod 700
な状態で作られるので別ユーザに覗かれる心配もなくなる。