コマンドを検討する eval false || echo ok echo also ok 通常、我々はこれを実行するために期待するfalseユーティリティをして、終了ステータスがゼロであることから、その後、実行するecho okとecho also ok。 すべてのPOSIXのような私が使用してシェルでは(ksh93、zsh、bash、dash、OpenBSDのksh、とはyash)、これは何が起こるかですが、私たちは有効にした場合、物事は面白くset -e。 set -eが有効な場合、OpenBSD shとkshシェル(どちらもから派生pdksh)は、の実行時にスクリプトを終了しますeval。他のシェルはそれを行いません。 POSIXは、特殊な組み込みユーティリティ(などeval)のエラーにより、非対話型シェルが終了するはずであると述べています。実行がfalse「エラー」を構成するかどうかは完全にはわかりません(もしそうなら、それはset -eアクティブであることとは無関係です)。 これを回避する方法evalは、をサブシェルに置くことです。 ( eval false ) || echo ok echo also ok 問題は、POSIXに準拠した正しいシェルスクリプトでそれを実行する必要があるかどうか、またはOpenBSDのシェルのバグかどうかです。また、上記にリンクされているPOSIXテキストの「エラー」とはどういう意味ですか? 余分な情報:OpenBSDシェルは 、コマンドのecho ok有無にかかわらず両方を実行しますset -e eval ! true || echo ok 私の元のコードは次のようになりました set -e if eval "$string"; then echo …
以下のコードをランダムソースからターミナルにコピーして実行しました。 while sleep 1; do tput sc; tput cup 0 $(($(tput cols)-29)); date; tput rc; done & コードは、端末の右上隅に実行中の時計を表示することです。スニペットは非常にうまく機能し、私が望んでいたことを正確に実行しましたが、今はこのループを終了して時計を取り除きたいだけです。 また、上記のコードを理解する必要があります。tputコマンドが何をするのか知っているので、いくつかのアイデアがありますが、それでも接続できないドットがたくさんあります。