問題タブ [shell-trap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
2539 参照

shell - シェル終了コードのトラップ

私はシェルスクリプトに取り組んでおり、遭遇する可能性のあるさまざまな終了コードを処理したいと考えています。試してみるために、私は次のスクリプトを使用しています。

何かが足りないと思いますが、自分の「出口1」を閉じ込められないようです。0をトラップしようとすると、すべてがうまくいきます。

HUP(1)終了コードのトラップについて知っておくべきことはありますか?

0 投票する
2 に答える
2708 参照

signals - kshのカスタムトラップ信号

kshでカスタムの偽の信号を実装する方法はありますか?現在、ERR信号をキャプチャして終了しています。ただし、変更により、成功を返さない可能性のある呼び出しがありますが、それは有効な条件です。このような場合、この呼び出しが別の信号を生成するか、ERRを別の方法で処理することを確認したいと思います。それを行う方法はありますか?

0 投票する
1 に答える
1348 参照

shell - 終了タイムスタンプがシェルスクリプトに印刷されない:トラップの使用

デプロイメントに使用するシェルスクリプトがあります。プロセス全体の出力をキャプチャしたいので、それをサブシェルでラップし、それをテールアウトしました。

サブシェルを使用する前は、trapコマンドは機能していました。を押すCNTL-Cと、プログラムと日付が印刷さStopping Script:れます。

ただし、このスクリプトの出力を忘れないようにしたかったので、サブシェルを使用して出力を自動的に保存しました。そして、今trapは機能していないようです。

私は何が間違っているのですか?


新情報

もう少し遊んでください。問題はシェルでもサブシェルでもないことがわかりました。いまいましいパイプです!

tee出力をにパイプしない場合は、正常にtrap機能します。出力をにパイプするとtee、はtrap機能しません。

それで、本当の問題は、どのように出力をティーし、それでも使用できるtrapかということです。


テストプログラム

答える前に、次のテストプログラムを試してください。

上の1つはにパイプしsomefile....ます。一番下のものはそうではありません。一番下のトラップは機能します。一番上のもの、トラップはしません。パイプを機能させ、「スクリプトが強制終了されました」という行を使用して、ティードアウトファイルに出力できるかどうかを確認します。

パイプは機能します。トラップはありませんが、私がパイプを持っているときだけです。ステートメントをあちこちに移動して、trapサブシェルのレイヤーとレイヤーに配置できます。私がやっていることは間違っていることがいくつかあり、それが何であるかわかりません。

0 投票する
2 に答える
824 参照

shell - ksh while ループを終了する慣用的な方法

毎秒アスタリスクを出力する次の5秒タイマーがあります。

どういうわけか、トラップ チャンクは少しハックに見えます。現在のスリープ サイクルだけでなく、ループ全体を中断するより正しい方法があるのではないかと思います。私はもう試した:

関数の内外のさまざまな場所にありますが、前に触れたように、それは現在のスリープ サイクルを中断するだけです。

0 投票する
2 に答える
763 参照

bash - 一時ファイルなしでトラップを復元する

引数を指定しないtrapと、すべてのトラップに対して現在設定されているコマンドが出力されます。ただし、サブシェルはトラップを継承しないため、トラップを保存および復元する標準的な例は bash で失敗します。

割り当ての RHS のトラップはサブシェルで実行されるため、save_traps は常に空の文字列です。の出力を一時ファイルに書き込む以外trapに、トラップに設定されている現在のコマンドをスクリプトで見つけるにはどうすればよいでしょうか?

0 投票する
1 に答える
4697 参照

bash - この単純な bash トラップが失敗するのはなぜですか

私はまだ bash スクリプトにかなり慣れていないため、この単純なトラップが期待どおりに機能しない理由を理解するのに苦労しています。

目標CTRL- +を押してスキップできるオプションの待機期間を作成しますC

CTRL+ -を押したときの期待される結果Cすぐに「昼寝する時間がありません!」と反響します。そして終了します。

CTRL+ -を押した実際の結果は、Cすぐに "naptime over" をエコーし​​ます。そして終了します。

トラップ関数が呼び出されないのはなぜですか?

0 投票する
2 に答える
827 参照

bash - JBoss Init Script - トラッピングの問題

JBoss AS (v7.1.1) を開始/停止/etc するために使用するスクリプトを作成しています。SUSE Enterprise 11 で実行しているため、提供された initscript が機能しません。スクリプトで発生している問題は、クリーンアップ関数が呼び出されないことです。

0 投票する
1 に答える
800 参照

signals - Bourne シェルでシグナルとプロセスの終了を同時に監視する

別のプログラムを監視する Bourne シェル (/bin/sh) スクリプト (移植性のため) があります。他のプログラムを開始し、それが終了するのを待ちます。2 番目のプログラムが終了すると、最終的な作業を行って終了します。問題は、スクリプトがシグナル (USR2 など) にも応答し、それらのシグナルが表示されたときに何らかの処理を行う必要があることです。

私の素朴な実装は次のとおりです。

これはうまくいきません。シェル SIGUSR2 を送信すると、トラップは期待どおりに起動しますが、wait も終了し、140 が返されます。/bin/sleep は順調に進んでいます。典型的な出力:

この動作は、私が便利にアクセスできる 2 つの Bourne シェルの派生物である、dash と bash の間で一貫しています。

私の現在の回避策は、kill でプローブして、子 PID が消えるのを待ってループをスピンすることです。スピン ループは無駄に思えます。また、PID が急速に再利用されている場合、スクリプトが誤って間違ったプロセスを待機している可能性があるウィンドウが拡大します。

別のプロセスが終了するのを同時に待機し、シグナルに応答できるようにするという私の目標を考えると、より良い解決策はありますか?

0 投票する
3 に答える
1040 参照

bash - トラップファイア後に終了

このスクリプトを取る

fdControl-C から、またはスクリプトが正常に終了した場合に、一度起動したいと思います。ただし、Control-C を押すと、2 回実行されます。どうすればこれを修正できますか?

0 投票する
1 に答える
445 参照

linux - シェルスクリプトはプログラムを終了しますが、スクリプト自体は終了しません

シェルスクリプトを使用してネットワークアクセスポイントを自動的に検索しています。airodumpではctrl+cを使用して検索を停止し、検索をキャンセルしてシェルスクリプトを実行したままにします。Wi-Fiネットワークの検索が終わったら、ユーザー入力をしたいので。トラップを使おうとすると、airodumpとスクリプトが停止します。

airodump Wi-Fi検索を停止して、ユーザー入力のシェルスクリプトに移動したいだけです。