タグ付けされた質問 「error-handling」

シェルスクリプトで生成されたエラーの処理方法に関する質問には、このタグを使用します。

2
パターンはなぜ「コマンド|| 本当」有用ですか?
現在、Debianパッケージを調査しており、コードサンプルをいくつか読んでいます。また、たとえば、postinstスクリプトはすべての行でパターンです。 some command || true another command || true したがって、一部のコマンドが失敗すると、行はtrueを返しますが、これがプログラムの出力にどのように影響するかわかりません。


3
chmod +サイレントモード+エラーにもかかわらず終了コード0を強制する方法
chmodを実行し、コマンドからのエラーを無視することは可能ですか 例(file.txtは例を示すために存在しないことに注意してください) 入力するとき chmod 777 file.txt 出力でエラーが発生します chmod: cannot access file.txt : no such file or directory そこで、次のようにコマンドに-fフラグを追加します(大文字と小文字を示すためにfile.txtは存在しません) chmod -f 777 file.txt echo $? 1 しかし、例からchmodは1を返します エラーにもかかわらずchmodコマンドに強制終了コード0を与える方法をアドバイスしてください

7
nVidiaドライバーの更新中にエラーを回避するために、Xサーバーを閉じる方法は?
nVidiaドライバーを更新しようとしましたが、ドライバーのインストールを実行するとエラーが発生しました。 エラーを参照してください: エラー:Xサーバーを実行しているようです。Xを終了してください インストール。詳細については、「インストール」セクションを参照してください。 Linuxドライバーで利用可能なREADMEのNVIDIAドライバー www.nvidia.comのダウンロードページ。 注:ガイドに従って入力しようとしましたinit 3が、何も変わりませんでした。Xサーバーを閉じる方法は? ドライバーを更新できます

6
トラップ、ERR、およびエラー行のエコー
トラップを使用してすべてのエラーで関数を呼び出すエラー報告を作成しようとしています: Trap "_func" ERR ERR信号の送信元の行を取得することはできますか?シェルはbashです。 それを行うと、使用されたコマンドを読んで報告し、いくつかのアクションを記録/実行できます。 それとも私はこれですべて間違っていますか? 私は以下でテストしました: #!/bin/bash trap "ECHO $LINENO" ERR echo hello | grep "asdf" そして$LINENO2を返しています。動作していません。

5
一致しない場合にgrepが終了しないようにする
このスクリプトは「後」をエコーし​​ません。 #!/bin/bash -e echo "before" echo "anything" | grep e # it would if I searched for 'y' instead echo "after" exit また-e、shebang行のオプションを削除した場合も同様ですが、エラーが発生した場合にスクリプトが停止するように、それを保持したいです。grepが一致しないことをエラーと見なすことはありません。突然終了するのを防ぐにはどうすればよいですか?

2
「make」エラーコードのリストはどこにありますか?
私が使用してFortranで書かれたプログラムのコンパイルしようとしていますmake(私が持っているMakefileを含むディレクトリにいる間、およびMakefileを、私はコマンドを入力し$ make target、「ターゲット」は、システム固有の目標仕様で、私の中に存在しているMakefileを。として、Iターゲット仕様のさまざまなリビジョンを試してみると、呼び出しを試みるとさまざまなエラーメッセージが表示されることがよくありますmake。 make[1]: Entering directory /bin/sh: line 0: test: too many arguments ./dpp angfrc.f > angfrc.tmp.f /bin/sh: ./dpp: Permission denied make[1]: *** [angfrc.o] Error 126 make[1]: Leaving directory make: *** [cmu60] Error 2 そして make[1]: Entering directory /bin/sh: line 0: test: too many arguments ./dpp -DSTRESS -DMPI -P -D'pointer=integer'-I/opt/mpich_intel/include …

2
curlなどのコマンドがエラーなしで完了したかどうかを確認する方法
curlを使用して、HTTPポスト経由でファイルをサーバーにアップロードしています。 curl -X POST -d@myfile.txt server-URL コマンドラインでこのコマンドを手動で実行すると、などのサーバーから応答が返されます"Upload successful"。ただし、スクリプトを使用してこのcurlコマンドを実行する場合、POST要求が成功したかどうかを確認するにはどうすればよいですか?

6
コマンドが成功した場合にのみ出力を抑制するにはどうすればよいですか?
通常成功するセカンダリコマンドの出力を抑制することにより、スクリプトの出力を単純化したいと思います。 ただし、-qそれらを使用すると、時々失敗するときに出力が非表示になるため、エラーを理解する方法がありません。さらに、これらのコマンドは出力をに記録しますstderr。 成功した場合にのみコマンドの出力を抑制する方法はありますか? たとえば、次のような(ただしこれに限定されません): mycommand | fingerscrossed すべてうまくいった場合fingerscrossed、出力をキャッチして破棄します。それ以外の場合は、標準出力またはエラー出力(何でも)にエコーします。

2
rsync:権限のないファイルをスキップします
rsync -rlptD別のユーザーからディレクトリをコピーするために使用しています。コピーする権限がないファイルがいくつかあります(これらを事前に知る方法はありません)。rsyncがこれらを無視する方法はありますか?問題は、rsyncがゼロ以外を返すと、bash -xスクリプトが終了することです。

7
bashでファイルを作成または切り捨て/上書きできるかどうかを確認するにはどうすればよいですか?
ユーザーは、foo.sh file.txtまたはのようなスクリプトのある時点で作成または上書きされるファイルパスを使用してスクリプトを呼び出しますfoo.sh dir/file.txt。 create-or-overwriteの動作は、>出力リダイレクト演算子の右側にファイルを置くか、引数としてファイルを渡すための要件によく似ていますtee(実際、引数として渡すことteeはまさに私がやっていることです) )。 スクリプトの内容に入る前に、ファイルを作成/上書きできるかどうかを合理的にチェックしたいのですが、実際には作成しません。このチェックは完全である必要はありません。はい、チェックとファイルが実際に書き込まれるポイントの間で状況が変わる可能性があることを理解しています-しかし、ここではベストエフォートタイプのソリューションで大丈夫ですので、早期に救済できますファイルパスが無効な場合。 ファイルを作成できなかった理由の例: ファイルにはディレクトリコンポーネントが含まれていますdir/file.txtが、ディレクトリdirは存在しません ユーザーは、指定されたディレクトリ(またはディレクトリが指定されていない場合はCWD)に書き込み権限を持っていません はい、「事前に」許可を確認することはUNIX Way™ではないことを理解しています。むしろ、操作を試し、後で許しを求める必要があります。ただし、私の特定のスクリプトでは、これによりユーザーエクスペリエンスが低下し、責任のあるコンポーネントを変更できません。

4
構文エラーでbashにスクリプトの実行を中止させる方法は?
安全のために、構文エラーが発生した場合、bashはスクリプトの実行を中止します。 驚いたことに、私はこれを達成できません。(set -e十分ではありません。)例: #!/bin/bash # Do exit on any error: set -e readonly a=(1 2) # A syntax error is here: if (( "${a[#]}" == 2 )); then echo ok else echo not ok fi echo status $? echo 'Bad: has not aborted execution on syntax error!' 結果(bash-3.2.39またはbash-3.2.51): $ ./sh-on-syntax-err …

4
プロセス置換を使用するときに、終了コードをキャプチャする/エラーを正しく処理するにはどうすればよいですか?
SOのQ&Aから取得した次のメソッドを使用して、ファイル名を解析して配列にするスクリプトがあります。 unset ARGS ARGID="1" while IFS= read -r -d $'\0' FILE; do ARGS[ARGID++]="$FILE" done < <(find "$@" -type f -name '*.txt' -print0) これはうまく機能し、あらゆる種類のファイル名のバリエーションを完全に処理します。ただし、存在しないファイルをスクリプトに渡すこともあります。例: $ findscript.sh existingfolder nonexistingfolder find: `nonexistingfile': No such file or directory ... 通常の状況では、スクリプトで終了コードをキャプチャし、次のようなRET=$?方法で終了コードを取得します。これは、上記のプロセス置換では機能しないようです。 このような場合の正しい手順は何ですか?リターンコードをキャプチャするにはどうすればよいですか?代替プロセスで何か問題が発生したかどうかを判断する他のより適切な方法はありますか?

2
Trapコマンドを使用してエラーをトリガーする方法
Ubuntu 12.04.2を使用しています。「トラップ」コマンドを使用してシェルスクリプトの異常またはエラーをキャプチャしようとしていますが、「エラー」終了を手動でトリガーしようとしています。 exit 1を試しましたが、「エラー」信号はトリガーされません。 #!/bin/bash func() { exit 1 } trap "echo hi" INT TERM ERR func 「エラー」終了信号を手動でトリガーする方法がわからない場合

1
Linuxの標準エラーコードは何ですか?
たとえば、ファイルをコピーするbashでコードを書くと、ファイルが存在しないときに、ターミナルで「file not found」に似たエラーが表示されます。スクリプトユーザーに許可されたエラーが表示されない場合upは「permission denied」に似ています。 基本的に、プログラミング言語が何であれ、たとえばファイルをコピーするコードを書くとき、使用しているプログラミング言語はOS(私の場合はlinux)にそれを要求します。何か問題が発生すると、OSは便利なエラー(コード+メッセージ)。 システム上のすべての標準エラーコードをリストするコマンドを実行できますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.