• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:シェルスクリプト trap処理につきまして)

シェルスクリプトのtrap処理について

このQ&Aのポイント
  • シェルスクリプトのtrap処理について困っています。
  • スクリプト内で処理を止めた場合に「stopped」を表示させることが出来ず、困っています。
  • どなたかご教授いただけますでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.4

#2です。ようやくわかりました。 スクリプトの実行の仕方が間違ってます。 $ source ファイル名 か、 $ . ファイル名 で実行していますね。それだと、スクリプトの実行と言うより、キーボードからコマンドを打つ代わりにファイルから打ったのと同じです。 $ bash ファイル名 とするか、 $ chmod +x ファイル名 $ ./ファイル名 と実行してください もういちどLinuxの入門書を読むのがいいかと。

tamanegin
質問者

お礼

bash ファイル名 sh ファイル名 ./ ファイル名 で実行したら、上手くいけました! . ファイル名 で今までスクリプト実行をしておりました。 実行方法については、あまり調べておらず理解しておりませんでした・・・。 勉強し直してきます! ありがとうござました!!

その他の回答 (3)

回答No.3

シェル内におかしなところは見当たりませんし、私も実行してみましたけど普通に結果がでます。質問者さんもう一度別ファイル名で作成して実行してみたらどうでしょうか?

tamanegin
質問者

補足

新しくファイル作成し、スクリプト作成しましたが、やはり同じ現象のままでした・・・。 一つ気になったのですが、sleep中に「Ctrl+C」と処理を止めているのに、「Ctrl+C」を押した後、 start end と表示されるのは正しくスクリプトは動いているのでしょうか・・・?

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

おかしいですね。お書きのような現象はあり得ません。 本当にお書きのスクリプトそのままで実行していますか? trap "echo stopped > /tmp/1" 1 2 3 15 echo start sleep 10 echo end で動作確認してみてください。 >コマンド入力できるようになったところで、「Ctrl+C」を押すと「stopped」が表示されます。 これは、シェルのコマンドラインで、trapコマンドを入れてしまったんだと思います。 ログインしなおすか、trap 1 2 3 15 でリセットしてください。

tamanegin
質問者

補足

上記スクリプトをそのままコピーして作成して、 スクリプト実行いたしましたが、やはり正常に動作しません・・・。 スクリプト実行中に「Ctrl+C」を押すと、 start end と表示され終わります。 そして、コマンド入力できるところで、「Ctrl+C」を押すと /tmp/1ファイルが作成され、ファイルの中身に「stopped」が表示されます・・・。 ログインし直したりとしておりますが、正常に完了しません。。。。

  • freetaka
  • ベストアンサー率53% (106/197)
回答No.1

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 という感じにします^-^;

tamanegin
質問者

補足

上記スクリプトを作成し、実行いたしましたが、やはり現象変わらずでした・・・・。 いったい何が原因なんでしょうか・・・><