- ベストアンサー
シェルスクリプトを実行後すぐに中断する方法
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>(一般的な方法を知りたいのでスクリプト内でwaitというのは無しでお願いします。) 一般的な方法としてはスクリプトの1行目を見ます。 #!/bin/zsh 等。 1行目が#!で始まらない場合は、そのスクリプトを実行するシェルの機能に依存します。Linuxだと一般的にはbashからの起動となるので、その場合、スクリプトもbashで実行されます。
その他の回答 (2)
- saijyo_739
- ベストアンサー率53% (119/222)
確実に間に合う方法ってないと思います。 csh系のシェルにはstopコマンドがあるのでなど、個別には可能と なる場合もありますが。 確認するなら、スクリプト内部で認識すれば良いのではないかな。 ※ 表示する・表示しないは別にして(ログファイルを作り記録など)。 Ctrl+z同様、間に合わないかも知れなくて良いならそのシェルに SIGNALを送ると止めれますが(killコマンド使って停止や再開シグナル を送る) Ctrl+zを押すのもkillコマンド使ってシグナルを送る事を行っている だけでしょうし、fgやbgでの再開も再開シグナルなどのシグナルを 送っているだけでしょうし。 最初にインタプリタ行を確認とありましたが、bash scriptや sh scriptでどちらのシェルでも動くように書かれたスクリプト を実行した場合にはインタプリタ行の記述とは異なる場合も ありますし。 大抵のシェルで$$が自プロセスのpidになっているでしょうから $$のプロセステーブルを見てそれがシェルなら(sourceコマンドや . コマンドで読込み実行されている場合)そのshell、違う場合には 親プロセスのシェルをというのが手順かな。 プロセステーブルの更新タイミングの問題もあるのでpsコマンドで 単純に取得できるかというとやってみないと分からない面があります ので、その辺りの同期をとってやる必要がでてくる事も考えられ ますね。 『一般的な方法を知りたいのでスクリプト内でwaitというのは無し』 との事ですが、waitコマンドはshにもcshにも組み込まれている内部 コマンドですので十分一般的な方法だと思いますよ。
- xkuonx
- ベストアンサー率41% (23/56)
求めている回答とは違うとは思いますが… シェルスクリプトって一番上に #!/bin/bash みたいなの書きませんでしたっけ? #!/bin/bash なら、bashが動いてると思いますが、違いますかね?
関連するQ&A
- シェルについて
cshやbash、zsh、tcshなど色々ありますがどう違うのでしょうか。 これまであまり考えずにSoalrisやLinuxにログインして普通に作業してきましたが、ただtabやバックスペースが使用できないというだけでzshやtcshにして使用してきました。 ただこれだけ色々シェルがあるとしたら使用方法がいろいろ違うのではないかと思っております。 シェルスクリプトを作成する時の文法が違うとかでしょうか。
- ベストアンサー
- Solaris系OS
- [シェルスクリプト内で bashコマンド後のコマンドが実行されない]
[シェルスクリプト内で bashコマンド後のコマンドが実行されない] 以下の様にシェルスクリプトを記述するとコマンド2が実行されません。 #! /bin/sh コマンド1 bash コマンド2 bash環境でコマンド2を実行させるにはどうしたら良いのでしょうか?
- ベストアンサー
- Linux系OS
- シェルスクリプト間で排他をとりたい
環境 linux(redhat) 使用シェル bash シェルスクリプトAとシェルスクリプトBを作成し、 シェルスクリプトAが動作している間は、シェルスクリプトBの動作を禁止したいと考えています。 例えば、シェルスクリプトAが起動している状態で、シェルスクリプトBが起動されたとき、シェルスクリプトBは、シェルスクリプトAが起動していることを検知して、自発的に処理を終了するようにしたいと考えています。 上記のような仕組みをシェルスクリプトで実現可能でしょうか? 基本的には、シェルスクリプトの先頭で、ある資源のロックを行い、終了時にロックの解放ができれば、その仕組みは実現可能と考えています。 (シェルの異常終了時は、ロックが自動的に解放されることが望ましい) 上記のようなことをシェル(bash)で実現可能でしょうか。 bash単独での方法、もしくはbashからperl,C言語作成の実行モジュールを呼び出す方法でもかまいません。 (ちなみにperl(もしくはC言語作成のモジュール)単独では実現可能なことはわかっています)
- ベストアンサー
- その他(プログラミング・開発)
- シェルスクリプト(Bash偏)の実行ファイルに関するご質問があります。
シェルスクリプト(Bash偏)の実行ファイルに関するご質問があります。 ファイル名を変更するシェルスクリプトをbashで行おうとプログラムを作成したのですが、 実行するとbad interpreter: ディレクトリではありません とメッセージが出て終了します。記述に誤りがあるのか、実行の仕方が悪いのか分かりません。教えて下さい。 シェルの記述内容は ファイル名をtest.sh #!/bin/bash/ -f mv A.txt A.ori exit 実行方法として #>chmod x+a test.sh #>./test.sh で行いました。そうしたら、bad interpreter: ディレクトリーではありません とメッセージが出ます。 ちなみに #>. test.sh で実行するとターミナルがシェルの実行と同時に閉じてしまいますが、シェルを実行したディレクトリーを確認すると、処理が終わっておりました。
- ベストアンサー
- Linux系OS
- shのシェルスクリプトの演算方法について・・・
bashのシェルスクリプトについてもお聞きしたのですが、 その方法では演算ができない!ということになってしまいました・・・ こういうちょこっとしたところが違うのが嫌です・・・↓ bashの場合は ---------- bash$ a=1 bash$ a=$(( $a + 1 )) bash$ echo $a 2 ---------- となったのですが、shではエラーが出てしまいました・・・ また、shのスクリプトもbashのスクリプトもシェルスクリプトと呼ぶのでしょうか?
- ベストアンサー
- その他(OS)
- シェルスクリプトの作り方
OSはVineで、bashシェルです。 シェルスクリプトの作り方ですが、 1.ファイルを作る。 例えば、 #!bin/sh cd tmp このとき、ディレクトリはどこでもいいのでしょうか? 2.権限を付ける。 chmod u+x filename 3.実行 ./filename 他に気をつけることはないでしょうか? 実行すると、 bash: ./filename: bad interpreter: そのようなファイルやディレクトリはありません となってしまって、どうしても実行できません。
- ベストアンサー
- Linux系OS
- シェルスクリプトについて
とあるUNIXサーバが1台あるとします。 でそのマシン上の管理プログラムが同一マシン上にある 「シェルスクリプト(bash)」をキックするとします。 となるとそのシェルスクリプトの実行者(?)は Unixにログオンしているユーザーになるのでしょうか?。 目的としてはそのログインしているユーザーの環境変数 をシェルから参照したいのですが・・ 考え方がWindowsなもので。。すみませんが よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- シェルスクリプトで標準エラーが出たらスクリプトを停止させる方法は?
centOS 5で] 以下のようなシェルスクリプトを実行させています。 #!/bin/bash mount -t cifs -o username=root,password=abcd //192.168.0.5/backup /mnt/win rsync -vr /home/data /mnt/win >> backup.log 上のシェルスクリプトでもしmountが失敗したらスクリプトを停止させる方法を 探しています、どなたかご教授願います。
- 締切済み
- Linux系OS
- シェルスクリプトのBシェル(Bourne)に出てくる、$0,$1,$2
シェルスクリプトのBシェル(Bourne)に出てくる、$0,$1,$2...のような位置パラメタや、$?,$$,$!,$-のような特殊変数がありますが、これはPerlやRubyもあるようですが、意味や効果、やり方等は同じでしょうか。 当方はPHP,JavaScriptしか触れていませんし、PHPやJavaScriptは、そのような位置パラメタや特殊変数は見当たりませんでした…。 つまり、PerlやRubyはUNIXのコマンドから誕生したスクリプト言語ということでしょうか。 こういった位置パラメタや特殊変数はPerlやRuby以外に他の言語にもありますでしょうか。PythonとかCとかJavaとか…。 また、Bシェルを学んでいる途中ですが、シェルスクリプトの中にはbourne以外にもbashやC Shell,zsh,Perlがありますが、何故Perlが入っているのでしょうか。 Perlをやっている方は別途シェルスクリプトをやる必要はないということでしょうか。
- ベストアンサー
- Linux系OS
- Macでシェルスクリプト実行時にターミナルを非表示にしたい
こんにちは、よろしくお願いします Macでシェルスクリプトを実行する際にターミナルを表示させないもしくはシェルスクリプト終了後ターミナルを終了させたいのですが、その方法が解りません ターミナルの環境設定でシェルの終了時:シェルが正常に終了した場合閉じるになっています 実行しているスクリプトはごく簡単な以下のような1行ものです #!/bin/bash open smb://192.168.1.10/d ご存知の方ご教授お願いします OSX10.5です よろしくお願いいたします
- 締切済み
- Mac