プロセスリストから変数値を非表示にしながらパイプに変数値を送信するには?

プロセスリストから変数値を非表示にしながらパイプに変数値を送信するには?

私は一度PINを変数として読み込み、それを使ってこのPINを必要とするいくつかのコマンドを呼び出す簡単なシェルスクリプトを書いています。これらのコマンドは標準入力からPINを読み取るように指示できますが、プロセスリストに表示せずに変数値をパイプに送信する方法はわかりません。一般的な方法(使用echo "$PIN")は、他のユーザーがプロセスリストを介してPIN値を表示できるように置き換えを実行します。

変数名を受け入れ、その変数の値を標準出力に出力するコマンドはありますか?それとも別の方法がありますか?

ベストアンサー1

すべてのシェルに組み込まれているため、echoプロセスリストには表示されません。

ただし、任意のデータについては信頼できません。

より安定したものを使用できますが、printf '%s\n' "$PIN"一部のpdkshベースのシェルにはまだprintf その機能が組み込まれていません。これらの問題に対する解決策print -r -- "$PIN"は、すべての実装で使用できますが、print標準ではありません。zshksh

ここでマニュアルを使用することもできます。

cmd << EOF
$PIN
EOF

(またはここでstring(cmd <<< "$PIN"zshとは異なるシェルを使用してください)。ただし、ほとんどの実装では、ここにあるドキュメントは一時ファイルを使用して実装されているため、ファイルがディスクにコミットされている場合はPINをオフラインに復元できます。

回避できる場合は、環境にエクスポートしないことをお勧めします。PIN他のプロセスでより簡単に見つけることができるからです(/proc/pid/environ同じuidを持つプロセスは読み取ることができますが、通常、あるプロセスが他のプロセスのものを読むことができるかどうかはさらに制限があります)。メモリ)。ps一部の(まれな)システムでは、すべてのプロセスの環境を見ることもできます。

ただし、環境内に入ると、一部のシステムにはprintenvその値を表示するコマンドがあります。

printenv PIN

または、いつでも次のものを使用できますperl

perl -le 'print $ENV{PIN}'

おすすめ記事