問題タブ [bash-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 投票する
2 に答える
1722 参照

bash - bash トラップはシグナルを無視しません

このbashスクリプトを検討してください:

予想どおり、ctrl-c でスリープを中断しようとすると失敗します。しかし、rsync は中断可能です (スリープと rsync の順序は関係ありません)? どんなアイデアでも大歓迎です!

編集:違いが見つかりました:rsync自体が2つの子プロセス(2つのエラーメッセージを生成するクライアント/サーバー)を開始し、これらは親の「無知」を継承していないようです。bash ソースに飛び込んで、trap がどのように機能しているかを調べる必要があります...

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

bash - Windowsのcmdプロンプトを再起動し続ける方法

Cygwinのbashは、多くの場合、Windowsのcmdコマンドシェルよりも望ましいため、Windowsシェルを生成する前に環境をセットアップするために使用します。ただし、 Ctrl-Cを使用してこの生成されたシェルで実行中のプロセスの実行を停止すると、ユーザーはbashシェルに戻ります。

私が試みた回避策:

このアプローチでは、cmdを1回だけ再起動します。後続のCtrl-Cはキャッチされません。cmdプロセスを再起動し続ける方法はありますか?

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

linux - Alt + f4 からファイルを保護するために使用されるトラップ コマンド

SIGKILL (ALT+ F4) シグナルからファイルを保護するためにTrapコマンドが使用されるかどうかを知りたいです。もしそうなら、次のコマンドはそれを行いますか?

閉じようとしているすべてのシグナルを中止しようとしていますleft.py

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

arrays - トラップ状態を保存して復元しますか? トラップの複数のハンドラーを管理する簡単な方法は?

bash既に設定されているかどうかにかかわらず、既存のトラップ ハンドラーを永続的に踏みにじらないトラップ ハンドラーをオーバーライドする良い方法は何ですか? トラップ ルーチンの任意のチェーンを動的に管理する場合はどうでしょうか。

後で復元できるように、トラップ ハンドラの現在の状態を保存する方法はありますか?

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

bash - bash シェル: control-c でシェルに空のファイルを書き込むことはできますか?

私はbashシェルスクリプトを持っています。テキストファイルに書き出します。コマンドレベルでcontrol-cを使用してスクリプトを停止すると、ほとんどの場合に機能します。時々、次のように書き込まれたファイル

空になってしまいます。そのため、control-c を押して実行中のシェル スクリプトを停止すると、ファイルへの書き込みを開こうとしているインスタンスでキャッチされ、ファイルに何かを入れる前に、チャンスがなく、そのままになる可能性があります。空の?

そうだとすれば。ファイルに書き込まれた後、ファイルに再度書き込む機会が得られる前に正常に終了するように、bash シェル スクリプトで何ができますか。これは while ループで実行されているためです。ありがとう!

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

linux - トラップがパイプラインで機能しなかった理由

このスクリプトにはスクリプトtrap.shがあります

およびtest.sh。test.sh が似ている場合

また

トラップが効く

しかし、test.shが似ている場合

トラップは機能しませんでした。

これがなぜなのか知っている人はいますか?

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

bash - 子bashプロセスで親のトラップハンドラーを変更する

bashスクリプトから子プロセスとして(バックティックを使用して)呼び出されるbash関数があります。この関数 (子プロセスで実行されている) が親のトラップ ハンドラを変更する方法はありますか? この関数は、親が終了したときにクリーンアップしたい一時ファイルを作成します。例として

次に、呼び出しスクリプトには次のようなものがあります。

$roe_dirこのスクリプトが終了したら、(EXIT トラップを使用して) 削除したいと思います。これを達成するためのクリーンな方法のアイデアはありますか?

get_roe_dir()出力をキャプチャするためにサブシェルで実行されるため、関数に EXIT トラップを追加できません。したがって、get_roe_dir()が戻るとすぐにサブシェルが終了し、EXIT トラップが呼び出され、作成された一時ディレクトリが削除されます。