Hama Blog

Hama Blog

主にtech関連の記録

コマンド履歴から任意の文字列に該当する履歴を削除するコマンドを自作した

概要

普段 zsh を使っているが、Ctrl + r でコマンド履歴から過去のコマンドを呼び出したいときに、タイポなどで実行してしまった不要な履歴が候補に含まれてしまうのが邪魔だった。

なので、それらを個別にキーワード指定して削除できるコマンドを自作してみた。(.zsh_history に対して sed コマンドを実行するのをちょっと楽にしただけ)

成果物

#!/bin/sh
#
# .zsh_history から指定した文字列が含まれる行を削除
#
# params:
# $1: コマンド履歴に含まれるキーワード
#

# sed コマンドは区切り文字が / なので、キーワードに含まれる / はエスケープする
TARGET_KEYWORD=${1//\//\\/}
sed -i -e "/$TARGET_KEYWORD/d" ~/.zsh_history

上記を任意のファイルに保存してパスを通せばOK。

自分の場合は delhis というファイル名で保存して、delhis {削除したいコマンド履歴に含まれる文字列} という風に実行できるようにした。

(e.g. delhis hoge と実行すると hoge だけでなく hoge fugahoge/fuga の履歴が削除される)

作った経緯

コマンドを実行するときにタイポだったり、オプションの指定順を間違ってコマンドを失敗させてしまうことがたまにあるので、それらが履歴に出てくるのが嫌だった。

例えば、hoge というコマンドを実行したかったのに、hofe としてしまった場合、次から ho で検索すると hofe まで出てきてしまう。

(以下は Warp のスクショ)

こういうときは無視するか、.zsh_history から該当履歴の行を削除してしまえばいいのだが、簡単に消せればいいのになあと思って、Linux の勉強がてらに自作してみた。

sed コマンドとか使ったことなかったし、シェルスクリプトも作ったことがほとんどなかったので少し勉強になった。


そもそもコマンドが失敗したときは .zsh_history に残らないようにすればいいので(そういうことをしている記事もあったので)、また時間があるときにそこらへんを見てみようと思う。