• ベストアンサー
  • すぐに回答を!

[シェルスクリプト内で bashコマンド後のコマンドが実行されない]

[シェルスクリプト内で bashコマンド後のコマンドが実行されない] 以下の様にシェルスクリプトを記述するとコマンド2が実行されません。 #! /bin/sh コマンド1 bash コマンド2 bash環境でコマンド2を実行させるにはどうしたら良いのでしょうか?

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数1964
  • ありがとう数4

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

  • ベストアンサー
  • 回答No.1
  • kmee
  • ベストアンサー率55% (1857/3366)

> bash ここで、bashが対話モードで起動してプロンプトを表示するので、コマンド2を実行しないで終了しているように見えるだけです。 スクリプト実行前、スクリプト中のコマンド1の前、「実行後」(正確には「実行中」ですが)で ps コマンドを実行して、動いているプロセスの確認してください。スクリプトが実行中で、bashが増えているのが確認できると思います。 exit と入力してbashを終了されば続きが実行されます >bash環境でコマンド2を実行させるにはどうしたら良いのでしょうか? #-cオプションを使う bash -c コマンド2 # コマンド2がbashのスクリプトなら-cは不要 bash コマンド2 # 標準入力を使う echo 'コマンド 2' | bash # 標準入力を使う:複数あるならヒアドキュメントを使う bash << EOCOMMAND コマンド2 EOCOMMAND # shでやらなければならない理由がないのなら # bashで動作するスクリプトにしてしまう #!/bin/bash #↑パスは実際のにあわせること

共感・感謝の気持ちを伝えよう!

質問者からのお礼

お礼が送れて申し訳ございません。 様々な用例のご回答誠にありがとうございました。

関連するQ&A

  • bashシェルスクリプトで空白がある場合のコマンドは変数にどう記述したらいいのでしょうか?

    bashのシェルスクリプトで #!/bin/bash -x CMD=/bin/service portmap restart;/bin/service nfslock restart;/bin/service nfs restart $CMD としたのですが2行目で既にコマンドが実行されてしまいます。 空白がある場合のコマンドは変数にどう記述したらいいのでしょうか?

  • シェルスクリプト bashのtestコマンドが動きません

    こんにちは、ど素人なのにシェルスクリプト仕事で書かされ苦しんでます。 SUN-solaris8で動作したシェルをLinuxE3.0へ移動させたら testコマンドでエラーになりました。 SUN-solaris8ではbsh LinuxE3.0ではbashです。 test -s file名は両方で認識するようですが、 test -s ../directory名/file名で指定して 実行するとSUNでは動作したのですが Linuxではわけの分からないメッセージが出て終了。 Linuxで % sh と打つと/bin/bash % test と打つと /XXX/usr/binだったかな?パス忘れました。 % man bashでマニュアル見るとtestは[]で囲め?   英語だから良く分からなかった。   疲れたので今日は諦めました。 testコマンドで良い解決法ご教示願います。 情報が不足なら指摘いただいた物を追加いたします。

  • シェルスクリプトの実行、「source」と「.」の違いについて

    bashのシェルスクリプトを書いています。 当方、Mac Snow Leopard を使っているため、seq コマンドがデフォルトでは使えません。 そこで、.bashrc 内に、seq 関数をあらかじめ自分で定義して、他で使い回したいと思っています。 .bashrc の中に、 function seq() { i=$1 while [ $i -le $2 ] ; do echo $i let i=$i+1 done } と、関数を定義しました。 seq 関数をターミナル上で実行すると、 >seq 0 2 0 1 2 と正しく、表示されます。次に、 #!/bin/sh seq 0 2 と記述したシェルスクリプト(temp.sh)を「source」で実行すると、 >source temp.sh 0 1 2 と正しく、表示されますが、「.」で実行すると、 >./temp.sh ./temp.sh: line 2: seq: command not found と言われます。 どのような理由によってこの違いが出るのでしょうか??

その他の回答 (1)

  • 回答No.2
  • pakuti
  • ベストアンサー率50% (317/631)

やりかたは既に出ていますが、ひとつ気になった事を ディスティリビューションが何かにもよりますが 最近のものであれば、おそらくは /bin/shは/bin/bashへのシンボリックリンクです。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

お礼が送れて申し訳ございません。 ご回答ありがとうございました。 今回質問させていただいた環境ではまだ確認しておりませんが、 自分のPC環境で調べてみた結果確かにbashへのシンボリックリンクでした。 しかし、上記例のコマンド2は実行されませんでした。。

関連するQ&A

  • シェルスクリプトのbashとperlについて

    シェルスクリプトのbashとperlについて 今さら気づいたのですが、PerlもUNIXのコマンドやシェルスクリプトとして使用できるということでしょうか。 RubyやPHPをUNIXのコマンドやシェルスクリプトとして使用することはできますでしょうか。 学ぶとしたら、bashとPerlのどちらが良いでしょうか。 また、シェルスクリプトはどんな用途や利点がありますでしょうか。 Webアプリケーションによるバックアップやログをタイマーでセットして自動的に取得したりすることは可能でしょうか。

  • bashシェルスクリプトで変数を使う

    bashシェルスクリプト内で変数を使いたいです。 Linux内の設定ファイルを参考に、 ・変数名=その内容、で設定 ・${変数名} 、で呼び出す だと判断し、以下のように使っています。 #!/bin/bash WORK=/home/aaa/ cd ${WORK} その後検索したところ、 「呼び出すには、$変数名 のように記述する」との説明を見かけ、 実際$の後に変数名を付けるだけでも認識したのですが、 { }は付けても付けなくてもよいのでしょうか。 { }が必要な場合もあるのでしょうか。

  • シェルスクリプト(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 で実行するとターミナルがシェルの実行と同時に閉じてしまいますが、シェルを実行したディレクトリーを確認すると、処理が終わっておりました。

  • bashのシェルスクリプトの書き方

    macos x 10.5.5です。 あるコマンドを実行すると"y/n"を聞いてきます。コマンドラインから実行した場合は、単純にキーボードから"y"などと入力すれば済むわけですが、これをbashのシェルスクリプトでやる場合はどう書けば良いのでしょうか。尚、"y/n"に対する応答(キー入力)は常に"y"で構いません。 >hoge delete file1 -- hogeというコマンドを実行 >Are you sure ? ( enter y/n ) -- hogeが確認を要求 >y -- キーボードからyを入力 よろしくお願いします。

  • シェルスクリプトからPHP実行

    シェルスクリプト(bash)内で、以下のようにPHPを呼んだ場合、 その次の処理がPHPの終了を待たずに実行されるようなのですが、 どうしてでしょうか? #!\bin\bash /usr/local/php4/bin/php /home/test.php echo "test!" 以上 なぜか test! という表示がPHPの処理中に出るように思えます。

  • Linuxでシェルスクリプトがフルパスだと実行できない

    Linuxでシェルスクリプトがフルパスだと実行できない こんにちは 現在linuxでシェルスクリプトを記載していて、やっと出来た!と思ったら、なぜかフルパスで実行すると失敗します。 中身は例えば #!bin/sh echo "hello" とし、ファイル名をtest.shとします。 実行時にカレントからだと上手くいきます。 ./test.sh ただし、フルパスで実行するとうまくいきません。 ./home/user/test.sh エラーは以下 bash: ./home/dv3/tet.sh:No such file or directory 所有者はrootでグループもrootにしてあります。 シェルの権限は755にして、rootで実行しています。 なぜカレントだと上手くいき、フルパスだと上手くいかないのでしょうか? パスが必要なコマンドも入っていないのに。。。 どなたかご教授いただけると幸いです。 宜しくお願い致します。

  • シェルスクリプトの作り方

    OSはVineで、bashシェルです。 シェルスクリプトの作り方ですが、 1.ファイルを作る。 例えば、 #!bin/sh cd tmp このとき、ディレクトリはどこでもいいのでしょうか? 2.権限を付ける。 chmod u+x filename 3.実行 ./filename 他に気をつけることはないでしょうか? 実行すると、 bash: ./filename: bad interpreter: そのようなファイルやディレクトリはありません となってしまって、どうしても実行できません。

  • シェルスクリプトで配列が使えない

    シェルスクリプトを利用するときに変数を配列として扱えるという記述を見たので、 以下のようなシェルスクリプトを作成したのですが、エラーが出てきてしまいます。 端末で直接入力すると、正しく動作します。そのためなぜエラーとなるのかわかりません。 環境はubuntu 10.10、 GNU bash, バージョン 4.1.5(1)-release (i686-pc-linux-gnu) です。 ---------------------- #!/bin/sh list=(`ls`) echo ${list[0]} ---------------------- 3:Syntax error: "(" unexpected

  • シェルスクリプトで困っています 2

    度々申し訳ございません。 現在、Linuxマシン1からLinuxマシン2へTelnetでログインし、Linuxマシン2上にあるシェルスクリプト(/bin/sh)を実行し、Linuxマシン2上のプログラムを実行した後、Linuxマシン2からログアウトするシェルスクリプトを作成中です。 その、Linuxマシン2からログアウトする際に、 "exit"を記述しているのですが、その"exit"がTelnetログアウトの意味で実行されず、シェルスクリプトを終了するの意味で実行されていて困っています。 どなたか上手くTelnetからログアウトできるようにシェルスクリプトを組む方法をご存知ではないでしょうか?もし判りましたらご教授下さい。 よろしくお願い致します。

  • Bashシェルスクリプトの書き方

    Bashシェルスクリプトの書き方 ↓のx.shはどこが間違っているのでしょうか? $ cat x.sh #!/bin/bash function x() { local dir if $1; then dir=$1 else dir="." fi `find $dir -type d` } ↓こうなります $ source x.sh $ x dir dir: command not found bash: .: ./dir: はディレクトリです