今現在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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) ログインシェル時のSHELL環境変数 1 2022/06/08 19:21
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- 友達・仲間 彼氏持ちの女子と下校した 1 2022/12/14 22:09
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- その他(プログラミング・Web制作) Pythonの作業環境・作業フォルダの迅速な設定・指定方法 3 2022/04/01 07:55
- その他(プログラミング・Web制作) ZWCAD CUIXとLISPの関係について 1 2022/09/28 03:07
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- 友達・仲間 学年で起きた炎上事件 3 2023/01/01 11:59
- 哲学 日本語のあたらしい文法を考えよう。 6 2022/06/25 17:41
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
このQ&Aを見た人はこんなQ&Aも見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
expectでコマンド実行結果を変数に代入出来ない
UNIX・Linux
-
cshで拡張子を除いたファイル名を取得したい
その他(プログラミング・Web制作)
-
スクリプトのエラー「unexpected EOF while looking for matching `'」の解決法は?"
UNIX・Linux
-
-
4
echo off"の動きをLinuxのシェルスクリプトで実現"
UNIX・Linux
-
5
long型の定数の末尾にLを付ける意味
C言語・C++・C#
-
6
sedなどで、特定の文字列の後の文字列を抽出したい
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
batである文字列内に特定の文字...
-
シェルスクリプトの変数の制限?
-
if文について
-
kshでのNULLの比較
-
Dirコマンドでフォルダ内ファイ...
-
TOPコマンドで表示するCPU使用...
-
エクセルの表にヘンな枠が・・・
-
スクリプトのエラー「unexpecte...
-
テキストファイルから最終行の抽出
-
UNIX コマンドにおける # や円...
-
bashでシングルクォート内の変...
-
AIXでの文字コード、改行コード...
-
ラズパイで『’test.service’をs...
-
SONYの音楽ソフト「x-アプリ」...
-
Openイベントを開始させないで...
-
ファイル名についている「-」と...
-
シェルスクリプトでエラーが出ます
-
pingは正常なのにtracerouteで...
-
空きIPアドレスを探す方法
-
コマンドプロンプトにおけるコ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
batである文字列内に特定の文字...
-
スクリプト中のexportコマンド...
-
if文について
-
シェルスクリプトの変数の制限?
-
Bシェル 文字列に含まれる特...
-
sh スクリプト ipアドレス形式...
-
shellスクリプトから別のshell...
-
シェルスクリプトの引数
-
【sh】tee コマンドの代替方法
-
Cシェルで標準エラー出力への...
-
kshでのNULLの比較
-
bashスクリプト
-
ファイルから文字列を読み込む...
-
平均値の算出
-
Cシェルプログラムで、あるディ...
-
【シェルスクリプト】whileルー...
-
【シェルスクリプト】 ローカル...
-
powershellのパイプでテキスト...
-
シェルで and/or の優先順位に...
-
bashのスクリプト内で、パイプ...
おすすめ情報