grepを使用するときに、パスワードまたはその他の機密情報がbash履歴に保存されないようにするにはどうすればよいですか?


21

ファイルに保存されている可能性のあるパスワードを最近grepする必要がありました。その行をbashの履歴に表示したくありませんでした。

grepを使用しているときに、パスワードやその他の機密情報がbash履歴に保存されないようにするにはどうすればよいですか?たとえば、grepを使用してstdinまたはコンソールからパターンを読み取るにはどうすればよいですか?

回答:


37

あなたが入れた場合はHISTCONTROL=ignorespace、あなたの.bashrcに、そしてあなたは、コマンド名の前にスペースを入れて、それはあなたの履歴に追加されることはありません。

$ export HISTCONTROL=ignorespace
$ grep "passwd" secret_password_file.txt   # added to history
$  grep "passwd" secret_password_file.txt  # not added to history

3
FWIW:タイトルの質問と本文の質問は完全に異なります。タイトルの質問に答えました。

あなたの批判は適切です。タイトルを編集しました。今はいいですか?私はまだあなたの答えが最も関連性があると考えています(そして、コミュニティもそうです)。
レオ

1
私はあなたの質問を編集して、物事を明確にし、両方の質問(何かが履歴に保存されるのを防ぎ、grepでstdinを読むこと)を可能にしました。このように、すべての答えはまだ有効ですが、非常に異なるソリューションが混乱することはありません。

5

完全を期すために、本文の質問に答えます:grepを標準入力からパターンを読み取る方法:

次の-fオプションを使用できます。

grep -f- /path/to/file

これによりstdin、から任意の数のパターンが1行に1つずつ読み取られます。(-つまりstdin、1行に1つずつ、パターンを持つファイルを指定できます。)grep/path/to/file、指定されたパターンのいずれかに一致する行に一致します。


ありがとう。これは、OR結合パターンが必要なときに言う、良い貢献し、同様に他の場所で使用するための便利なトリックです
レオ

2

これは私が思いつくことができる最高のものです:

grep $(read -p "Pattern: "; echo $REPLY) .*

これで十分ですか?ターミナルをスクロールする以外にパターンを回復する方法はありますか?もっと良い方法はありますか?


3
read -sエコーを防ぐために使用できます(この質問も参照してください)。psただし、シークレットは出力に表示されます。代わりにgrep -f /dev/stdin *(またはgrep -f - *)を使用して、grepが代わりにファイルからパターンを読み取り、入力を^D、またはで終了できるようにします(read -es; echo $REPLY) | grep -f - *
。– mr.spuratic

1
キャプチャシェルは、二重引用符で囲む必要があります。現時点では、ユーザーがスペースまたはいくつかの特殊文字を入力すると、これは壊れます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.