
今現在VineLinux4.1をサーバとして起動させております。
その関係もありまして維持としてシェルを動かす事はある意味必須の状態です。
本題はAと言うスクリプトからBと言うスクリプトを呼び出す方法がわかりません。
試してみた方法はsourceで呼び出す方法です。
A.shの中身を以下とすると
#!bin/bash
echo ="B.shを呼び出します"
source B.sh
echo ="シェルスクリプトを終了します"
exit 0
上記のようにした場合、最初のecho文は出力され、B.shの内容を一通り終えると最後のechoは出力されずA.shは完了しません。
ごくごく基本的なことかもしれませんが、うまく検索にも引っ掛けられなかったので、ご質問させていただきます。
よろしくお願い致します。
No.3ベストアンサー
- 回答日時:
#2です。
>cshは=の前後にスペースが入るかと思いますが、今回はbashを指定しておりますので。
cshの何のことを言ってるのかわかりませんが、例えばbashで、
echo="シェルスクリプトを終了します"
は、echoコマンドじゃなくて、echo というシェル変数に「シェルスクリプトを終了します」という文字列をセットするコマンドになります。当然何も表示されません。
>A.shとB.shは単独で正常に稼動できる状態です。
B.shが単独で正常に動いているように思えることは、B.shに問題がないことを意味しません。
例えば、B.sh をexitで終了したりするとそこでbashは終了するわけだし。
>質問の例はあくまで例ですが、
書かれているA.shに問題がなさそうなので、B.shの中に原因があると想像しました。
現象が発生する最小限の、A.sh と B.sh の内容をすべて正確に書いてください。
今気づきましたが、A.sh の最後に無意味なexit 0がありますが、もしかして、B.shの最後にもexit 0が?
source コマンドは、その場所に指定したファイルの内容を挿入するコマンドです( C の #include 相当 )。もし、新たにbashプロセスを起動して、そこでB.shを動かしたいなら、
bash B.sh
です。他には#1の方が書いた方法もあります。
notnot様、ご回答ありがとうございます。
私の勘違いで「=」を挿入してしまいました。
おっしゃるとおりです、お詫び申し上げます。
実際試してみたところ「bash B.sh」、これが私のほしかった回答です。
A.shとB.shは単純に合わせると500行に及ぶ内容でしたので今回かなり簡略化して例題とさせていただきました。
無意味なexit 0とおっしゃられますが、シェルの結果情報として戻り値を設定しておくのは基本と認識していたのですが、誤解のようですね。
このあたりも改めて勉強させていただきます。
今回は「bash B.sh」で質問の回答が得られたと言う事で締めさせていただきます。
この度は私の勘違いもあいまって回りくどくなってしまいましたが解決できまして助かりました。
ありがとうございました。
No.2
- 回答日時:
B.sh の中に原因があるのではないですかね。
あるいは、echo と = の間に空白が無くて、echoコマンドになってないとか。
この回答への補足
ご回答ありがとうございました。
質問の例はあくまで例ですが、同様の指定方法でログなどは吐き出されておりますのでechoコマンドの使い方は間違っていないと認識しております。
cshは=の前後にスペースが入るかと思いますが、今回はbashを指定しておりますので。
その他は#1の補足とあわせて何かアドバイスがございましたら宜しくお願い致します。
No.1
- 回答日時:
ちゃんと実行ビットを立てていれば
>source B.sh
は、
B.sh
か、もしA.shと同じディレクトリにあって、そのディレクトリがPATHに登録されていないものであれば
./B.sh
でいけませんか?
この回答への補足
早速のご回答ありがとうございました。
補足と致しましてB.shの内容は正常に実行されております。
問題はA.shの内容の途中でB.shが組み込まれているわけですが、この呼び出されたB.shが終了してしまうと残りのA.shの内容を残して終了してしまう事なんです。
スクリプトの内容はA.shがサービスの起動内容になり、B.shはiptablesの設定になります。
やりたい事は起動したサービスに対し、iptablesの設定を同時に、適切に行うというもので、A.shの内容の中にB.shを組み込まなければ、A.shとB.shは単独で正常に稼動できる状態です。
これで何かわかればお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
batである文字列内に特定の文字...
-
bashスクリプト
-
シェルスクリプトでうるう年判定
-
cshの条件式について教えてくだ...
-
UWSCについて
-
シェルスクリプトの変数の制限?
-
ファイルから文字列を読み込む...
-
if文について
-
【sh】tee コマンドの代替方法
-
Dirコマンドでフォルダ内ファイ...
-
SONYの音楽ソフト「x-アプリ」...
-
SPI非言語の問題 解説お願いします
-
net use /d の強制実行
-
ワイルドカードを使ってでフォ...
-
ラズパイで『’test.service’をs...
-
エクセルの表にヘンな枠が・・・
-
pingは正常なのにtracerouteで...
-
タスクバーの音量アイコンをク...
-
Linux環境 grepで改行コード(CR...
-
ddコマンドでイメージをコピー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
batである文字列内に特定の文字...
-
シェルスクリプトの変数の制限?
-
スクリプト中のexportコマンド...
-
shellスクリプトから別のshell...
-
if文について
-
bash 条件式について
-
bashスクリプト
-
Bシェル 文字列に含まれる特...
-
【sh】tee コマンドの代替方法
-
【シェルスクリプト】whileルー...
-
cshの条件式について教えてくだ...
-
UWSCについて
-
Cシェルで標準エラー出力への...
-
シェルスクリプトで
-
shellで$入り変数に値を代入す...
-
awk スクリプト内で、関数の出...
-
シェルからのストアド起動
-
ファイルから文字列を読み込む...
-
文字列の一部を取り除きたい(...
-
Cシェルにあるコマンドの代わり
おすすめ情報