本論に戻るために、read
ユーザー入力を受け取り、最終出力を印刷する前にインタラクティブにメッセージを表示するスクリプトがあります。呼び出すユーザーは、次の最終出力を取得すると予想されます。
AVAR=$(myscript arg1 arg2 arg3)
だから私はmyscriptで汚れた[?]ハッキング[?]を思い出しました。
# ... blah ...
echo -n "A prompt for the user " >> /dev/stderr
read SOMEVAR >> /dev/null
# ... other stuff ...
printf "Results\t$RESULT\n"
これはstderrを使用する邪悪で悪い習慣なのでしょうか、それとも私はただの手足が豊富で狡猾なのでしょうか?私の無知を許してください。私は100%の独学をしていたので、私が望んでいない呼び出し元変数のすべてをリダイレクトする必要があるという演繹的な推論を使います。ただし、プロンプトが表示された場合は、まだ表示する必要があります。 stderrは私です。想像できる。
答え1
回避策:はい、これは悪い習慣です。足りないものを埋めてくれた@SatoKatsuraに感謝します。
正しいアプローチは次のとおりです。
# ... blah ...
echo -n "A prompt for the user " >&2
read SOMEVAR >> /dev/null
# ... other stuff ...
printf "Results\t$RESULT\n"
これは移植可能で、より良い安全な方法です。