1 名前:1様 [2009/04/03(金) 22:17:43 ID:0qFlvOW9] UNIX板のスレを見ている方も多数おられるかと思いますが、 まあそれはそれとして、BASHウゼーとか言われる心配なく 平和にLINUX的スクリプト談義しましょうよ。 初めての自作スクリプト、自信ないから見てください。な初心者から トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで いろいろな人に参加して頂けると嬉しいです。 perlやらPythonやらの話が混ざっても良いんでない? Part4 : pc11.2ch.net/test/read.cgi/linux/1210999497/ Part3 : pc11.2ch.net/test/read.cgi/linux/1184077033/ Part2 : pc11.2ch.net/test/read.cgi/linux/1154578200/ Part1 : pc8.2ch.net/test/read.cgi/linux/1121994321/ >>2-5 あたりに色々と。
616 名前:login:Penguin mailto:sage [2010/02/28(日) 15:59:45 ID:0w7cauqm] >>606 が良ければなんでもいいでしょうに
617 名前:login:Penguin [2010/02/28(日) 16:00:23 ID:diBS8T6m] >>614 いかにもシェルスクリプトらしい解決法だね perl使うほうがメンドイ
618 名前:login:Penguin [2010/02/28(日) 16:32:44 ID:qTqfFliX] 感心しました。なるほど、うまいですね。 僭越ながら少し手を入れてみました。(sh 対応、外部コマンド実行回数減らす) #!/bin/sh A="" Q="" find . -type f | sort -f \ | while read F; do P=`echo "$F" | tr '[:upper:]' '[:lower:]'` if [ "$P" = "$Q" ]; then echo "${F}を削除" # rm "$F" fi A="$F" Q="$P" done
619 名前:login:Penguin mailto:sage [2010/02/28(日) 19:19:20 ID:ZpjvZrys] 勉強になります
620 名前:login:Penguin mailto:sage [2010/02/28(日) 19:46:12 ID:v9A/VFIk] 別ディレクトリになった時 Q="" しなくていいの?
621 名前:login:Penguin [2010/02/28(日) 20:01:15 ID:qTqfFliX] >>620 >>609 で楽するためディレクトリの大文字小文字は考えないことにしたんだけど、 d/abc.txt と D/abc.txt を同一視しちゃってるので、本当ならダメ、なんでしょう。 find . -type d するループを外側につけるか、 ディレクトリ名見る if をつければ直せそう。改修頼みます >>620
622 名前:login:Penguin mailto:sage [2010/02/28(日) 20:11:12 ID:0w7cauqm] だからそういうのは>>606 が決めることだって。勉強になります、じゃなかろうに
623 名前:login:Penguin mailto:sage [2010/02/28(日) 20:50:11 ID:v9A/VFIk] #!/bin/sh A="." find ./dir -type f | sort -f | \ while read F; do P=`dirname $F`/`basename $F | tr '[A-Z]' '[a-z]'` Q=`dirname $A`/`basename $A | tr '[A-Z]' '[a-z]'` if [ $P = $Q ]; then echo "rm $F" fi A=$F done
624 名前:login:Penguin mailto:sage [2010/02/28(日) 22:25:55 ID:v9A/VFIk] 書き直したので貼り直しますね。 #!/bin/sh B="!" find . -type f | sort -f | \ while read F; do T="`dirname $F`/`basename $F | tr '[A-Z]' '[a-z]'`" if [ $T = $B ]; then echo "rm $F" fi B=$T done
625 名前:login:Penguin mailto:sage [2010/02/28(日) 22:43:51 ID:oz3AO1O4] >>624 スペースを含むディレクトリ作って実行してみ。
626 名前:login:Penguin mailto:sage [2010/02/28(日) 23:06:54 ID:v9A/VFIk] Windowsじゃあるまいし。
627 名前:login:Penguin mailto:sage [2010/02/28(日) 23:09:17 ID:Z6hm/tn2] 空白や日本語を許すかで世代間のギャップが存在するなw
628 名前:login:Penguin mailto:sage [2010/02/28(日) 23:11:07 ID:0w7cauqm] 用件的にsamba絡みと予想してたけどね。知らんけど
629 名前:login:Penguin mailto:sage [2010/02/28(日) 23:13:21 ID:1hHY9Dv5] linuxでフォルダ名に空白入れることはないな、色々面倒だし
630 名前:login:Penguin mailto:sage [2010/02/28(日) 23:15:53 ID:oz3AO1O4] >>626 シェル変数参照の際、値に含まれるスペースや*などの パス名展開の文字が解釈されてしまうのを防ぐため、 ダブルクオートで囲むのは常識。 Windowsじゃないとかいう問題ではなく、 シェルスクリプトを書く際の常識。
631 名前:login:Penguin mailto:sage [2010/02/28(日) 23:50:39 ID:fdN9Zkx+] カラだったときエラーになっちゃうしね
632 名前:login:Penguin mailto:sage [2010/02/28(日) 23:53:35 ID:v9A/VFIk] わかった。わかった。次回からそうするよ。
633 名前:login:Penguin mailto:sage [2010/03/01(月) 00:59:23 ID:IaBmVUuE] >>610 >ただ表示させてるだけじゃん。 findでヒットした結果には任意のコマンドを適用可能。 馬鹿か?
634 名前:login:Penguin mailto:sage [2010/03/01(月) 01:09:07 ID:6uFj7AQh] 俺は>>628 だからそもそもどうでもいいけど、それかなりどーでもいいぞ
635 名前:login:Penguin mailto:sage [2010/03/01(月) 01:09:42 ID:QTdHsVxq] >>606 ファイル名を全部小文字に変えて、重複してたら上書きされて結果的に一つ残る。 ってやり方でも出来ると思う。(効率は良くない) こんなスクリプト書いて /home/hoge/script/RENAME_lower.sh とか名前付けて chmod +x しておく。 #!/bin/bash START_DIR="`pwd`" while (test -n "${1}") ; do if [ -d "${1}" ] ; then cd "${1}" && ( pwd ; ls for i in *\.[Tt][Xx][Tt] ; do if [ -f "${i}" ] ; then mv "${i}" "`echo ${i} | sed y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/`" fi done ) fi shift cd "${START_DIR}" done ディレクトリを find とかで検索して RENAME_lower.sh で処理。 $ find . -type d -exec /home/hoge/script/RENAME_lower.sh {} \+
636 名前:login:Penguin mailto:sage [2010/03/04(木) 23:43:06 ID:oO8XEq75] #!/bin/shと#!/bin/bashはどちらがおすすめなの?
637 名前:login:Penguin mailto:sage [2010/03/05(金) 00:16:06 ID:IlIr0pSM] #!/bin/bash
638 名前:login:Penguin mailto:sage [2010/03/05(金) 00:19:11 ID:FZm9BOvl] #!/bin/bashだろjk
639 名前:login:Penguin mailto:sage [2010/03/05(金) 00:56:20 ID:GiIL1sMg] 用途次第。以下はsh ・shで書いても機能・速度が許容範囲で簡単に書ける場合 ・shでないといけない場合(busyboxとか)
640 名前:login:Penguin [2010/03/05(金) 08:08:46 ID:CTq7Tclv] >>5
641 名前:login:Penguin mailto:sage [2010/03/05(金) 08:37:14 ID:GiIL1sMg] そいつはこのスレのお約束+α。YOUのオススメを書きなよ
642 名前:login:Penguin mailto:sage [2010/03/05(金) 09:01:18 ID:lZJ9zNnO] 今どきのディストリなら sh -> bash が当たり前だろ
643 名前:login:Penguin mailto:sage [2010/03/05(金) 09:56:40 ID:y7mY4KkL] 使い捨てなら深く考えずどっちでも OK。 別のマシンでも使うならよく考える。
644 名前:login:Penguin mailto:sage [2010/03/05(金) 10:20:23 ID:8QC8E4i2] >>642 Debian、Ubuntuはdash
645 名前:login:Penguin mailto:sage [2010/03/05(金) 12:02:50 ID:kHG21Qzt] ださw
646 名前:login:Penguin mailto:sage [2010/03/05(金) 14:24:04 ID:ixxT+8DA] >>641 それはUNIX板のシェルスクリプトスレと勘違いして貼られたもん このスレのテンプレじゃあない >>5-10 を見ろ
647 名前:login:Penguin mailto:sage [2010/03/05(金) 15:49:37 ID:D7CZBw7a] bashの構文を使ってれば#!/bin/bash、使ってなくても#!/bin/bash
648 名前:login:Penguin mailto:sage [2010/03/05(金) 22:06:54 ID:1xo9OzwV] おとなもこどもも、おねーさんも#!/bin/bash
649 名前:login:Penguin mailto:sage [2010/03/05(金) 22:38:25 ID:t7X9IkaB] BSD系の人たちはどうすれば?
650 名前:login:Penguin mailto:sage [2010/03/05(金) 22:41:37 ID:IlIr0pSM] 板違いです
651 名前:login:Penguin mailto:sage [2010/03/05(金) 23:39:40 ID:GiIL1sMg] $ sudo -i # cd /bin;\rm -f sh;ln -s bash sh
652 名前:login:Penguin mailto:sage [2010/03/06(土) 00:07:36 ID:z+KgTZo4] >>651 sudo ln -fs bash /bin/sh でいいんじゃね。
653 名前:login:Penguin mailto:sage [2010/03/06(土) 00:53:02 ID:zGIcPUED] コピペはできないようにしたかったから二行 ln -f は嫌い rm -f が好き
654 名前:login:Penguin [2010/03/06(土) 11:13:20 ID:8ckQdz96] ・sh では、while中で代入した変数は、ループから抜けると使えなくなりますか? ・それがPOSIX仕様なら、一時ファイルを作る以外に、よい回避方法はありますか? $ date | while read line; do last="$line"; done; echo "THE LAST: $last" を Debian lenny の dash, bash, ksh で実行した場合、ksh 以外では値が残りません。
655 名前:login:Penguin mailto:sage [2010/03/06(土) 12:21:04 ID:zGIcPUED] POSIX仕様は知らない シェル実装によって違いがあるけどパイプはサブシェルで実行される $ date | (while read line; do last="$line"; done;echo "THE LAST: $last") で回避になるならいいけど $ date | while read line; do last="$line"; done $ echo "THE LAST: $last" ということをしてkshを正解としたいなら一時ファイルくらいしか思いつかない
656 名前:login:Penguin mailto:sage [2010/03/06(土) 19:57:46 ID:vEOUh0ms] dateをパイプでwhileに放り投げる目的は何?
657 名前:login:Penguin mailto:sage [2010/03/06(土) 20:01:13 ID:lSm8LSXx] ただの例題
658 名前:login:Penguin mailto:sage [2010/03/06(土) 20:12:35 ID:zGIcPUED] このスレで質問してるやつはほとんど約1名でただのキチガイだと思ってる 区別ができれば間違いなく回答しないんだけどねぇ
659 名前:login:Penguin mailto:sage [2010/03/06(土) 21:29:26 ID:U6pPRiRF] お前以外は全部俺の自作自演です
660 名前:login:Penguin mailto:sage [2010/03/06(土) 21:38:12 ID:zGIcPUED] 質問者以外はどっちでもいいけど
661 名前:654 [2010/03/06(土) 22:34:04 ID:8ckQdz96] >>655 さん > シェル実装によって違いがあるけどパイプはサブシェルで実行される 勉強になります。 [linux-users:96159] Re: [bash]whileループ内変数値の扱いについて教えてください。 ttp://search.luky.org/linux-users.9/msg06102.html のような、3以上のfdを使う方向でいこうと思います。 ありがとうございました。
662 名前:login:Penguin mailto:sage [2010/03/07(日) 05:39:29 ID:qUDKVagf] 使っているbashの制約事項はどこに書いてある?
663 名前:login:Penguin mailto:sage [2010/03/07(日) 15:21:22 ID:kzHmHVjG] 日本語でおk
664 名前:login:Penguin mailto:sage [2010/03/07(日) 15:50:18 ID:BVZuVuVb] >>662 /usr/share/doc/bash-doc-*/COMPAT かな。
665 名前:login:Penguin mailto:sage [2010/03/07(日) 15:58:04 ID:CtU/xHgd] 俺の認識不足なのかもしれんが dateコマンドを単独で使っても、1行しか出力しなくね? $ date 2010年 3月 7日 日曜日 15:50:25 JST whileにパイプでつなぐ意味がわからん。 もしlsみたく複数行で出力するコマンド実行したならわからなくもないけど、 それなら無理にパイプでwhileにつなぐ必要ないし。 $ ls sample.sh sample2.sh xyz.txt $ for i in `ls`; do X="$i"; done; echo "$i" xyz.txt 別の方法で簡単に解決できることをどうして難しくするのか意味不明。
666 名前:login:Penguin mailto:sage [2010/03/07(日) 16:24:31 ID:/xXz4ARQ] >>665 おまえは質問者の質問意図がわかってない
667 名前:login:Penguin mailto:sage [2010/03/07(日) 16:27:22 ID:CtU/xHgd] >>666 わかるわけない。 whileにパイプでつないでサブシェルになるからどうとか、 そういうので困ったことないから。
668 名前:667 mailto:sage [2010/03/07(日) 16:29:06 ID:CtU/xHgd] っていうか、 実用上、それをどうしても使わないと書けないものなんてあるの? 例を示せるなら示してほしいもんだね。
669 名前:login:Penguin mailto:sage [2010/03/07(日) 16:31:06 ID:lFJTxoe3] おい、誰かこの馬鹿をつまみだせ
670 名前:login:Penguin mailto:sage [2010/03/07(日) 16:33:48 ID:CtU/xHgd] >>669 だから、実用上どういう意味があるのか教えてくれれば 言われなくても出ていくけど。
671 名前:login:Penguin mailto:sage [2010/03/07(日) 16:42:38 ID:lFJTxoe3] 変数の扱い方が知りたかっただけろ。 例としてとりあえず適当に思いついたdateを使ったんだろう。 ただの一例なんだから実用上は別に意味ない。
672 名前:667 mailto:sage [2010/03/07(日) 16:47:13 ID:CtU/xHgd] catコマンドを使ってファイルの中身を出力してパイプでwhileにつないだとか、 そういうのならわかるんだがな。 もっとも、その程度ならパイプ使わないで書けばいいだけだが。 だから、どんなことをキッカケにそんな質問が出てきたのかよくわからん。 まぁ、興味本位で意味のないことする人ってのもいるんだろうけどさ。 ガソリン車に灯油を入れてみるとか、 トラックでレールの上を走ってみるとか。 俺から見ると、そういう変人と同レベルの質問に見えるのさ。
673 名前:login:Penguin mailto:sage [2010/03/07(日) 18:49:32 ID:kzHmHVjG] (キリッ
674 名前:login:Penguin mailto:sage [2010/03/07(日) 18:57:12 ID:T97Hz24h] 頭の中でdateを適当なものに置き換えればいいだけじゃん。 質問する上での便宜かもしれないってのに いちいち突っ掛かってくるヤツってなんなの?
675 名前:login:Penguin mailto:sage [2010/03/07(日) 19:44:39 ID:CtU/xHgd] >>674 dateだからダメとかだけじゃなく、それ以前に変な質問だろ。 >>654 の >それがPOSIX仕様なら、一時ファイルを作る以外に、よい回避方法はありますか? に対する答は「パイプを使うな」。 >>661 の >3以上のfdを使う方向でいこうと思います。 に対しては「他に手段がないならさておいて・・・正気か?」。
676 名前:login:Penguin mailto:sage [2010/03/07(日) 22:20:17 ID:EI1vZsn/] だから、お前はそもそもまともなスクリプトも書けないのに、容喙せんでいい。
677 名前:login:Penguin [2010/03/07(日) 23:06:32 ID:qcuqADXg] >>676 あれほどアホな質問しない程度には書けるが。 質問者が何をやろうとしてるか知らんが 意地でもパイプでwhileに投げて実現しようとしてんだろ? まともな神経してたら別の方法でやるのにさ。 っていうか、質問者を擁護してる君も質問者みたいな書き方すんの? 合理性を考えたほうがいいよ。
678 名前:login:Penguin mailto:sage [2010/03/07(日) 23:27:59 ID:s4PVEnib] 見ない間に核心つかれてるし ここのキチガイはLIFEも低そうだし なむなむ
679 名前:login:Penguin mailto:sage [2010/03/08(月) 08:59:52 ID:/FTwkaX/] mkfifoでnamed pipe作って使う手もあるな。 mkfifo fifo; date > fifo& while read line < fifo ; do last="$line"; done; echo "THE LAST: $last" rm fifo
680 名前:login:Penguin mailto:sage [2010/03/09(火) 20:30:43 ID:o5fd938a] command 2>file.log で標準エラー出力をファイルに書き出しているのですが、 エラーでない場合も0バイトのfile.logが生成されてしまいます。 エラーでない場合はfile.logは生成しない方法などあるのでしょうか?
681 名前:login:Penguin mailto:sage [2010/03/09(火) 20:44:25 ID:NDaUm8+N] >>680 終了ステータスでエラーかどうかわかるじゃん。
682 名前:login:Penguin mailto:sage [2010/03/09(火) 20:47:03 ID:LVMm3tsD] ↑ ウォーニングは無視ですか?
683 名前:login:Penguin mailto:sage [2010/03/09(火) 20:48:59 ID:JIyb876K] 0バイトなら削除したらええがな
684 名前:login:Penguin mailto:sage [2010/03/09(火) 20:50:37 ID:NDaUm8+N] 条件後出しか…
685 名前:login:Penguin mailto:sage [2010/03/09(火) 20:52:24 ID:LVMm3tsD] 条件を甘く見たお前さんが悪い。
686 名前:login:Penguin mailto:sage [2010/03/09(火) 20:57:40 ID:NDaUm8+N] 居直られちゃったよ。
687 名前:login:Penguin mailto:sage [2010/03/09(火) 21:03:59 ID:o5fd938a] >>683 削除することにしました。 ファイル作らないで良い方法はないのかなー?
688 名前:login:Penguin [2010/03/09(火) 22:45:08 ID:wS8nnpNv] 2>file.log でファイルが開かれるのは command が実行される前。 エラーがあったかどうか分かるのは、command の実行が完了した後。 file.log の中身が重要かどうかは、実行終了まで分からないのだから、 普通に考えて、後から削除するのが素直ですよね。 素直じゃない例。長くなっても大丈夫か分かりません。 #!/bin/sh exec 3>&1 cmd='{ ./some.sh 2>&3 1>stdout.log 3>&- ; } 3>&1 | grep -v warning' errout=`eval $cmd` exec 3>&- if [ -n "$errout" ]; then echo "there were one or more error" echo "$errout" >stderr.log fi
689 名前:login:Penguin mailto:sage [2010/03/10(水) 20:15:59 ID:7RM74zt/] 久しぶりにマニアックなコード見た。
690 名前:login:Penguin mailto:sage [2010/03/12(金) 00:36:34 ID:g58g7Khc] 読み解けん;_;
691 名前:login:Penguin mailto:sage [2010/03/16(火) 06:49:42 ID:+KO51EwF] 一回3に2の出力を出して、空ならthere were one or more errorを1に出力、空じゃなければstderr.logに出力
692 名前:login:Penguin mailto:sage [2010/03/16(火) 08:33:07 ID:L4OU7Nfk] >>688 だれか解説よろ
693 名前:login:Penguin mailto:sage [2010/03/16(火) 17:36:29 ID:7rwiLleU] グロブで /etc/pass* のリストを得たいのだが、 list=/etc/pass* だと展開してくれない。 list=$(ls /etc/pass*) ならおkで、改行文字 '\n' 区切りのリストになる。 だが ls のために fork してしまうのが痛い。 どうにかならんのか。 お願いします m(_ _)m
694 名前:login:Penguin mailto:sage [2010/03/16(火) 17:41:09 ID:7rwiLleU] あっさり解決した。 printf "%s\n" /etc/pass* これでいいのか。よくわからんが、printfは組み込みコマンドだったはず。。
695 名前:login:Penguin mailto:sage [2010/03/16(火) 17:55:59 ID:oDvWUAap] >>693 試したら展開できたけどな。
696 名前:login:Penguin mailto:sage [2010/03/16(火) 17:59:59 ID:jFL6NZ+y] 昔はechoを使ったもんじゃ
697 名前:login:Penguin mailto:sage [2010/03/16(火) 18:00:18 ID:7rwiLleU] >>695 本当貝?bash? $ list=/etc/pass* $ echo "${list[@]}" /etc/pass* ダメなんだが。。これをパイプで他のコマンドに渡したいから、ギリギリで展開されても困る。
698 名前:login:Penguin mailto:sage [2010/03/16(火) 18:01:26 ID:oDvWUAap] >>697 echo $list で。
699 名前:login:Penguin mailto:sage [2010/03/16(火) 18:01:54 ID:7rwiLleU] >>696 echo だと改行文字 '\n' 区切りのリストにならない。 $ list=$(echo /etc/pass*) $ echo "${list[@]}" /etc/passwd /etc/passwd-
700 名前:login:Penguin mailto:sage [2010/03/16(火) 18:03:33 ID:oDvWUAap] >>699 そんな条件なかったじゃん。
701 名前:login:Penguin mailto:sage [2010/03/16(火) 18:05:27 ID:7rwiLleU] >>700 だからprintfを使うことにしたよ。 「一行ずつ」読むコマンドにパイプで渡さないといけないから。
702 名前:login:Penguin mailto:sage [2010/03/16(火) 18:06:01 ID:oDvWUAap] 後出しで文句言われても……。
703 名前:login:Penguin mailto:sage [2010/03/16(火) 18:07:08 ID:7rwiLleU] >>702 いえ事故解決しました、と言った後であなたが展開できましたとおっしゃったので 私はレスをしただけです。
704 名前:login:Penguin mailto:sage [2010/03/16(火) 18:08:01 ID:7rwiLleU] あ、どうもありがとう(^^)
705 名前:login:Penguin mailto:sage [2010/03/16(火) 18:15:41 ID:m9fA5s2e] for i in /etc/pass*; do echo "$i"; done | command...
706 名前:login:Penguin mailto:sage [2010/03/16(火) 18:17:49 ID:7rwiLleU] >>705 すみません、また後出しですが、一応言っておきます。 わざわざ変数 list に格納しているのは、後で自分が参照するからです。
707 名前:login:Penguin mailto:sage [2010/03/16(火) 22:36:09 ID:vMRJlqrh] はいはい次どぞー
708 名前:login:Penguin mailto:sage [2010/03/16(火) 22:41:29 ID:7rwiLleU] え、いいんですか?次
709 名前:login:Penguin mailto:sage [2010/03/20(土) 00:18:55 ID:qKxWTBVf] ファイルから丸括弧(開く) "(" だけの行を読み込んだ際、 if [ \( "$LINE" = "$CHK1" -o "$LINE" = "$CHK2" \) -a \( "$A" = "$B" -o "$C" = "$D" \) ]; then といったif文でエラーとなってしまいます。 何がまずいのでしょうか?
710 名前:login:Penguin [2010/03/20(土) 07:41:24 ID:SCWfCSZ4] >>709 if [ \( "x${LINE}x" = "x{$CHK1}x" だと通りませんか。
711 名前:login:Penguin mailto:sage [2010/03/20(土) 12:14:57 ID:qKxWTBVf] >>710 早速の回答、ありがとうございます。 マシンが平日しか使えないので、火曜日に試してみます。 ところで、$LINE="("の場合だと、 if [ \( "$LINE" = "$CHK1" \) ]; then だとエラーとなりますが、 if [ "$LINE" = "$CHK1" ]; then だとエラーとなりませんでした。 何か書き方が間違えているのでしょうか?
712 名前:login:Penguin mailto:sage [2010/03/20(土) 12:17:45 ID:qKxWTBVf] 連投すません。 どちらの書き方も、$LINE="(A"とかだとエラーとなりません。 "("の場合のみ、エラーとなります。 なんでだろ?
713 名前:login:Penguin mailto:sage [2010/03/20(土) 22:21:20 ID:7Z9+G9O/] 例外処理ってどうすればいいだろうか。 for x in ... do 処理A && \ 処理B && \ 処理C && \ continue # エラー? 後片付け、そして次のアイテム done サブルーチン化するもの手だけど、それも大袈裟な場合ってどうやるのがスマートだろうか。 すべてを && を繋げる方法しか思いつかない。。
714 名前:login:Penguin [2010/03/20(土) 22:33:44 ID:SCWfCSZ4] >>713 ttp://www.unix.com/shell-programming-scripting/38127-exception-handling.html に、 cleanup_script() { echo "Cleaning ..." } trap 'cleanup_script' ERR set -e ってコードがあったです。set -e が肝らしい。
715 名前:login:Penguin mailto:sage [2010/03/20(土) 22:43:49 ID:7Z9+G9O/] >>714 ありがとう。便利ですが、/bin/sh(DebianだとDASH)ではうまく動作しませんでした。 BASHなら問題ありません。 handler() { echo "Trap ERR!" exit 1 } set -e trap ?handler? ERR for x in $(seq 1 10) do echo $x [ $x -eq 5 ] && false done 実行結果: 1 2 3 4 5 Trap ERR!
716 名前:login:Penguin mailto:sage [2010/03/20(土) 22:47:11 ID:7Z9+G9O/] SIGUSR1 30,10,16 Term ユーザ定義シグナル 1 SIGUSR2 31,12,17 Term ユーザ定義シグナル 2 これを使うのもアリか...