
今現在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である文字列内に特定の文字...
-
ファイルから文字列を読み込む...
-
スクリプトのエラー「unexpecte...
-
UNIX コマンドにおける # や円...
-
Linuxコマンドは何の言語で書か...
-
SONYの音楽ソフト「x-アプリ」...
-
ファイル名一覧の印刷
-
pingは正常なのにtracerouteで...
-
PowerShellのスクリプト実行に...
-
シェルスクリプト実行で”そのよ...
-
エクセルの表にヘンな枠が・・・
-
IPアドレスだとPingが通るのに...
-
net use /d の強制実行
-
Debian Linux で、「fetch」に...
-
Linux環境 grepで改行コード(CR...
-
「環境変数名の編集」ウィンド...
-
デフラグは途中で止めても効果...
-
ddコマンドでイメージをコピー...
-
windows10のごみ箱をrd /s /q C...
-
指定したプログラムの実行を禁...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
batである文字列内に特定の文字...
-
if文について
-
スクリプト中のexportコマンド...
-
シェルスクリプトの変数の制限?
-
Bシェル 文字列に含まれる特...
-
bashスクリプト
-
【シェルスクリプト】whileルー...
-
【sh】tee コマンドの代替方法
-
Cシェルプログラムで、あるディ...
-
UWSCについて
-
rubyで、バッククォートの中に...
-
cshの条件式について教えてくだ...
-
kshでのNULLの比較
-
シェルスクリプトのパス
-
シェルスクリプトでうるう年判定
-
ログインシェル時のSHELL環境変数
-
Cシェルで標準エラー出力への...
-
shellスクリプトから別のshell...
-
Cシェルにあるコマンドの代わり
-
exprで四則演算をする際に変数...
おすすめ情報