【小ネタ】シェルのコマンド履歴に残さない方法
こんにちは、高崎@アノテーション です。
はじめに
皆さんはセンシティブなパラメータを必要とする Web API を curl コマンドでシェルから実行する必要に迫られたことはありますでしょうか?
私はあります。
その時にとあるやり方を TIPS として展開したところ、知らないメンバーがいたため小ネタとして記事にします。
TIPS について
冒頭で申し上げた
ですが、
…というご意見もあるでしょうが、例えば、
prompt$ curl -v -X POST https://APIのURL \
-H 'accessToken: ここにアクセストークンが入ります' \
-d '{ \
"destinationId":ここに相手先のアクセスIDが入ります \
}'
といったコマンドをどうしてもシェル上で実行する必要が出てきた際、アクセストークンだったりアクセス ID といったセンシティブな情報が、シェルの履歴に残ってしまうのは好ましくないこともあります。
逐次ホームディレクトリにあるヒストリファイルを編集して消してもよいのですが、そのまま履歴に残さない方法があります。
prompt$ curl -v -X POST https://APIのURL \
-H 'accessToken: ここにアクセストークンが入ります' \
-d '{ \
"destinationId":ここに相手先のアクセスIDが入ります \
}'
こうやるだけです。
先ほどと同じのように見えますが、差が一つあります。
先頭に半角スペースを入れる
だけです。
残りますけど?という時
最近では基本的にこのやり方で残らないと思いますが、もし履歴に残ってしまっている(history
コマンドを打つと残ってしまっている)場合、ホームディレクトリにあるリソースファイルに以下の行を入れます。
bashの場合
HISTCONTROL=ignorespace
もしくは
HISTCONTROL=ignoreboth
設定して保存したあと新たにシェルを開くか、同じシェル上であれば source ~/.bashrc
を実行。
zshの場合
setopt hist_ignore_space
.bashrc のときと同じですが、コマンドは source ~/.zshrc
になります。
他のシェルの場合
fish
あまり使ったことがないのですが fish の場合はすでに有効になっていたかと思いますので、設定ファイルをいじることなく先頭にスペースを入れるだけで行けると思います。
csh / tcsh
unset savehist
を行うと、履歴へ保存すること自体を出来なくすることは可能ですが、今回のケースのように特定のやり方で残す/残さないといった切り替えはできなかったと思います。[1]
その他
使ったことがないのでわかりません。
ごめんなさい。
おわりに
今回はシェルの履歴への残し方をコントロールするやり方について記載しました。
特に zsh においては、ここでは紹介しませんでしたが履歴や補間等、setopt を使った様々な設定がありますので、色々と自分好みにカスタマイズして効率化を図るとより良いと思います。
この記事が皆様のお役に立てば幸いです。
アノテーション株式会社について
アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。
サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。
ちゃんと使っていたのが 30 年くらい前の話ですのでもしかすると今は出来るのかもしれませんが軽く検索しても見つからずでした。 ↩︎