- ベストアンサー
シェルスクリプトのtrap処理について
- シェルスクリプトのtrap処理について困っています。
- スクリプト内で処理を止めた場合に「stopped」を表示させることが出来ず、困っています。
- どなたかご教授いただけますでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#2です。ようやくわかりました。 スクリプトの実行の仕方が間違ってます。 $ source ファイル名 か、 $ . ファイル名 で実行していますね。それだと、スクリプトの実行と言うより、キーボードからコマンドを打つ代わりにファイルから打ったのと同じです。 $ bash ファイル名 とするか、 $ chmod +x ファイル名 $ ./ファイル名 と実行してください もういちどLinuxの入門書を読むのがいいかと。
その他の回答 (3)
- saya_linux
- ベストアンサー率57% (8/14)
シェル内におかしなところは見当たりませんし、私も実行してみましたけど普通に結果がでます。質問者さんもう一度別ファイル名で作成して実行してみたらどうでしょうか?
補足
新しくファイル作成し、スクリプト作成しましたが、やはり同じ現象のままでした・・・。 一つ気になったのですが、sleep中に「Ctrl+C」と処理を止めているのに、「Ctrl+C」を押した後、 start end と表示されるのは正しくスクリプトは動いているのでしょうか・・・?
- notnot
- ベストアンサー率47% (4900/10358)
おかしいですね。お書きのような現象はあり得ません。 本当にお書きのスクリプトそのままで実行していますか? trap "echo stopped > /tmp/1" 1 2 3 15 echo start sleep 10 echo end で動作確認してみてください。 >コマンド入力できるようになったところで、「Ctrl+C」を押すと「stopped」が表示されます。 これは、シェルのコマンドラインで、trapコマンドを入れてしまったんだと思います。 ログインしなおすか、trap 1 2 3 15 でリセットしてください。
補足
上記スクリプトをそのままコピーして作成して、 スクリプト実行いたしましたが、やはり正常に動作しません・・・。 スクリプト実行中に「Ctrl+C」を押すと、 start end と表示され終わります。 そして、コマンド入力できるところで、「Ctrl+C」を押すと /tmp/1ファイルが作成され、ファイルの中身に「stopped」が表示されます・・・。 ログインし直したりとしておりますが、正常に完了しません。。。。
- freetaka
- ベストアンサー率53% (106/197)
sleepが動作中にtrapをしかけるのですから #!/bin/sh echo start trap "echo 'stopped'" 1 2 3 15 sleep 10 echo end というふうに sleepをかける直前にいれればOKです なお・・・わたしなら正常終了した時だけ「end」を表示したいので #!/bin/sh echo start trap "echo 'stopped'" 1 2 3 15 sleep 10 if [ $? -eq 0 ];then echo end fi という感じにします^-^;
補足
上記スクリプトを作成し、実行いたしましたが、やはり現象変わらずでした・・・・。 いったい何が原因なんでしょうか・・・><
お礼
bash ファイル名 sh ファイル名 ./ ファイル名 で実行したら、上手くいけました! . ファイル名 で今までスクリプト実行をしておりました。 実行方法については、あまり調べておらず理解しておりませんでした・・・。 勉強し直してきます! ありがとうござました!!