Movatterモバイル変換


[0]ホーム

URL:


hydroculのメモ >コマンドの使い方(Linux) >trap コマンド

trap コマンド2016/07/20

trapは外部コマンドではなく、シェルの組み込みコマンドで、シェルスクリプトがシグナルを受信したときの動作を設定するもの。シグナルの種類には番号がついていて、番号ごとに受信したときに実行するスクリプトを設定できる。

# SIGINTを受信したときに interrupted と表示して終了するtrap "echo interrupted; exit 1" 2# またはtrap "echo interrupted; exit 1" INT

シグナルの番号ごとに微妙に癖があるものがある。また本物のシグナルの他に擬似シグナルというのもある。

bashでは、help trap というふうにhelp コマンドでシェルの組み込みコマンドのヘルプを表示できる。help も組み込みコマンドである。残念ながらzshではできないみたい。

シグナル番号 0 または EXIT2014/05/31

擬似シグナルEXIT はスクリプトが終了するタイミングをトラップする。0と書いてもよい。

trap で指定するコードの中にexit で終了コードを指定すれば、スクリプト全体のもともとの終了コードが上書きされて、それに変わる。

trap "echo trap0" EXIT# またはtrap "echo trap0" 0# => 終了コード: 0trap "echo trap0" 0exit 1# => 終了コード: 1trap "echo trap0; exit 2" 0# => 終了コード: 2trap "echo trap0; exit 2" 0exit 1# => 終了コード: 2

擬似シグナル ERR2014/06/05

実行したコマンドの終了コードが0以外だったときをトラップできる。途中で実行したすべてのコマンドで0以外だったものをすべてトラップされる。擬似シグナルERRbash 独自の機能みたい。

コマンドすべてというわけではなく、ifの条件式にあるコマンドは、0以外を返してもトラップしない。

#!/bin/bashtrap "echo err" ERRtest 1 = 2if test 1 = 2; then    echo "message 1"fiecho "message 2"# 出力# err# message 2

trap で指定するコードの中にexit を入れれば、そこでスクリプトが終了する。

#!/bin/bashtrap "echo err; exit 1" ERRtest 1 = 2echo "message"# 出力# err
このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。

[8]ページ先頭

©2009-2025 Movatter.jp