2

シェルスクリプトで次のステートメントを読みました。

(unset CDPATH) >/dev/null 2>&1 && unset CDPATH

「unset CDPATH」が 2 つあるのはなぜですか? 最後のものは削除できますか?

4

1 に答える 1

3

最初の(unset CDPATH) >/dev/null 2>&1コマンドは の設定を解除しようとしCDPATHますが、サブシェル (括弧内) で実行し、エラーと出力が に送信され/dev/nullます。これが成功すると、メイン シェルで CDPATH の設定が解除されます。CDPATH の設定解除に失敗した場合、メイン シェルでの試行は行われません。これにより、CDPATH を設定解除できないというエラー メッセージが、それが使用されている configure スクリプトの出力に干渉するのを回避できます。

なぜ、いつこのような入念なテストが必要になったのかはわかりませんが、おそらくあるマシンのどこかで、ある時点で操作unset CDPATHが許可されず、configure スクリプトの出力が台無しになったのでしょう。自動構成シェル スクリプトはかなり奇妙であることに注意してください — 慣用的なシェルではありません — 全体として非常に移植性があります。彼らは、あなたが聞いたことのないシステムの奇妙さに対処しようとします。その中には、小学校を卒業して生まれる前に廃止されたものもあるでしょう。多くのテストの理由は、おそらく時の霧の中で失われました。迂回が必要なシステムがかつてありましたが、20 年前には使用されなくなったシステムであった可能性があります。

于 2013-03-29T03:54:15.613 に答える