私はターミナルで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 errexit
create.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$
これは動作します。なんて面倒な解決策でしょう。
私が欲しい私の端末シャットダウンを持たずに、D:端末から愚か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も機能しません
の代わりにset -o errexit
、command || return
create.shファイルのすべての場所でステートメントを使用する場合、(端末からsuper.shを呼び出す代わりに)supser.shの行を直接端末で実行しているときに、必要なものを取得します。しかし、それは実際的な解決策でもありません。
注:私は、子シェルを生成するだけの@terdonの回答が好きだったので、端末( )
全体ではなくスクリプトを介してサブシェルを生成することになりました。も動作します。
source $file_path argument
スクリプトは、呼び出し元と同じシェルで実行されています(実際source
、そう言われています...そして、そのように動作command || return
します)ステートメントは、ターミナルで実行しているファイルにあります