bashやzsh、fishなどではコマンドラインの先頭に空白をつけることで、そのコマンドラインだけhistoryに残さないという機能がある。 以下、fishでの実行例。
# 通常の操作だとhistoryに残る ❯ echo hello hello ❯ history -n 1 echo hello # 頭に空白を入れる(可視化のために空白を△に置換) ❯ △echo world world # echo world が残っていない ❯ history -n 1 history -n 1
今までトークンやパスワードを環境変数にセットするときにこの機能を使って履歴を残さないようにしていた。 しかしこの記事のタイトルにもしているけど、再起動や削除、変更を行うコマンドにも空白をつけるようにしはじめた。 手癖でhistoryを出して即実行(Ctrl-r -> Enter)してしまいあーーー!ってなるときや、historyで出てきたコマンドを参照コマンドだと思って引数だけ変えて実行したら削除コマンドだったとか、諸般の事情により*1共有アカウントを使っていて前の人のhistoryを即実行したら再起動だったとか…そういうやらかしを回避するのがモチベーション。 大事には至らなかったがヒヤリハットすることがあるのでそれの回避策としてやっている。 historyに残らないことで利便性が落ちるが、一旦実行するコマンドをなにかに書き出してチェックしてから実行することでより安全になるはず。
*1:アプライアンス製品とか