私は一度PINを変数として読み込み、それを使ってこのPINを必要とするいくつかのコマンドを呼び出す簡単なシェルスクリプトを書いています。これらのコマンドは標準入力からPINを読み取るように指示できますが、プロセスリストに表示せずに変数値をパイプに送信する方法はわかりません。一般的な方法(使用echo "$PIN"
)は、他のユーザーがプロセスリストを介してPIN値を表示できるように置き換えを実行します。
変数名を受け入れ、その変数の値を標準出力に出力するコマンドはありますか?それとも別の方法がありますか?
答え1
すべてのシェルに組み込まれているため、echo
プロセスリストには表示されません。
より安定したものを使用できますが、printf '%s\n' "$PIN"
一部のpdkshベースのシェルにはまだprintf
その機能が組み込まれていません。これらの問題に対する解決策print -r -- "$PIN"
は、すべての実装で使用できますが、print
標準ではありません。zsh
ksh
ここでマニュアルを使用することもできます。
cmd << EOF
$PIN
EOF
(またはここでstring(cmd <<< "$PIN"
)zsh
とは異なるシェルを使用してください)。ただし、ほとんどの実装では、ここにあるドキュメントは一時ファイルを使用して実装されているため、ファイルがディスクにコミットされている場合はPINをオフラインに復元できます。
回避できる場合は、環境にエクスポートしないことをお勧めします。PIN
他のプロセスでより簡単に見つけることができるからです(/proc/pid/environ
同じuidを持つプロセスは読み取ることができますが、通常、あるプロセスが他のプロセスのものを読むことができるかどうかはさらに制限があります)。メモリ)。ps
一部の(まれな)システムでは、すべてのプロセスの環境を見ることもできます。
ただし、環境内に入ると、一部のシステムにはprintenv
その値を表示するコマンドがあります。
printenv PIN
または、いつでも次のものを使用できますperl
。
perl -le 'print $ENV{PIN}'