• ベストアンサー

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

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

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

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

> 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 #↑パスは実際のにあわせること

hollycats
質問者

お礼

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

その他の回答 (1)

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

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

hollycats
質問者

お礼

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

関連するQ&A

  • シェルスクリプト(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シェルスクリプトで空白がある場合のコマンドは変数にどう記述したらいいのでしょうか?

    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コマンドで良い解決法ご教示願います。 情報が不足なら指摘いただいた物を追加いたします。

  • 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: はディレクトリです

  • 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

  • シェルスクリプトの実行、「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 と言われます。 どのような理由によってこの違いが出るのでしょうか??

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

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

  • sudoでシェルスクリプトを実行させたい

    /usr/bin/sudo を使って、xxx.shを実行させたいので、設定でxxx.shを許可しました。 その後Apacheで動くCGI(perlスクリプト)から、``を使って実行させようと考えています。 このときにこのxxx.shがうまく動きません。多分シェルにアクセスできないのだと思いますが、どうしたらこのスクリプトをroot権限で動かす事ができるようになるのでしょうか。関係あるかどうかわかりませんが、xxx.shの中身はディレクトリ作成コマンドなどです。ネットで検索したら、シェルスクリプトだけ許可にすればよいとあったのですが・・。セキュリティ的には/bin/shを許可するのはまずそうな気がするのですが、こちらを許可してもよいものでしょうか。 環境等 xxx.sh 755 所有者(user1) Apache実行ユーザ (apache) CGIの実行ユーザ(apache?) 挑戦したコマンド(とアパッチのログ) `/usr/bin/sudo sh ./xxx.sh`; ->パスワード求められます (/bin/shの権限がない?) `/usr/bin/sudo ./xxx.sh`; ->/usr/bin/sudo: unable to exec ファイルのパス No such file or directory (xxx.shのファイルの場所はあってます) `/usr/bin/sudo フルパス/xxx.sh`; ->/usr/bin/sudo: unable to exec ファイルのパス No such file or directory (xxx.shのファイルの場所はあってます) 不足の点などあればご指摘ください。