Bashスクリプト - 終了するのではなくエラーが発生した場合に返されますか?

Bashスクリプト - 終了するのではなくエラーが発生した場合に返されますか?

はい端末からbashスクリプトを取得するよってエラー終了

set -o errexit

端末を閉じて別の端末を開き、いくつかの変数をリセットする必要があるため、非常に迷惑な端末が終了します。

これまで使って

command || return

スクリプトの行は私が望むように動作しています。

set -o errexit

する必要があります...しかし、1行/コマンドだけではなく、スクリプト全体が完了したいと思います。

サイトを設定するためのコマンドでいっぱいのファイルがありますが、コマンドを実行したくありません。

ファイルの各行について

他の設定オプションがあるか、ターミナルを終了するのではなく「返す」という他のオプションはありますか?

-ただ明確にするために、スクリプトを終了してターミナルで実行されているサービスを終了するには、Ctrl + Cを押したのと同じ状態でターミナルを残したいと思います。command || returnこの方法。しかし、|| returnファイルのすべての行に追加したくありません。だから私はset -o errexit端末が閉じないようなものを探しています。

- - メモ: 2行を含む単純なスクリプト(super.sh)を作成します。

create_path=~/Desktop/site_builder/create.sh
source $create_path blah

set -o errexitcreate.shの上部に配置されます。

私が期待どおりに正しく動作します。しかし、端末から呼び出すのではなく、別のbashスクリプトを呼び出すために2行のファイルを生成する必要があるのは本当に愚かです。ええと

ここにいくつかの例があります。

super.shから

#!/bin/bash

create_path=~/Desktop/site_builder/create.sh
source $create_path blah

create.shから

#!/bin/bash
set -o errexit
#line below this is a line that fails and will cause the script to stop and return to the terminal as expected 
sed "s/@@SITE_NAME@@/$dirname" 
~/Desktop/site_builder/template_files/base.html > ~/Desktop/$dirname/templates/base.html # a line with a stupid error

ターミナルから:

 $ bash super.sh

出力は予想通りです。

my-mac$

これはうまくいきます。本当に迷惑な解決策です。

考える理想的には、ターミナルを閉じずにsuper.shファイルではなくターミナルで愚かなsuper.shファイルの内容を実行します。これが私がやろうとしていることで起こるものです。

端末コマンド:

my-mac$ source $create_path blah

create.shにはまだset -o errexit

これは端末の出力です。

    sed: 1: "s/@@SITE_NAME@@/blah": unterminated substitute in regular expression
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

[Process completed]

これにより端末が停止します。 Ctrl+C が機能せず、Ctrl+D も機能しません。

そうでない場合は、create.shファイルの任意の場所でステートメントを使用するset -o errexitcommand || return(ターミナルでsuper.shを呼び出すのではなく)、ターミナルから直接superser.shの行を実行しながら、必要なものを取得できます。しかし、これも実用的な解決策ではない。

メモ:( )サブシェルを生成するための@terdonの答えが気に入ったので、スクリプト全体の周りに中かっこを使って答えで示したように、ターミナルの代わりにスクリプトを介してサブシェルを生成します。彼の答えも効果があります。

ベストアンサー1

ファイルを入手するには、安全装置を使用してください。

source the-source-file || true

...これにより、失敗してもコマンド全体は失敗しませんsource

おすすめ記事