• ベストアンサー

バッチファイルの書き方

Linux上で実行するバッチファイルを作っています。 runというファイル名で、中には、  sudo ./GUItask とだけ書かれている、GUItaskというアプリケーションを実行するバッチファイルです。 (./runとコンソール上で打って使うつもりです) ここで、 アプリケーションが起動した時間と終了した時間を記録したいので、  /bin/date >> log  echo "起動" >> log  sudo ./GUItask  /bin/date >> log  echo "終了" >> log と書きました。 これで、logというファイルに、  2009年2月3日火曜日12:12:43 JST  起動  2009年2月3日火曜日12:15:43 JST  終了 などと書かれるようになりました。 これを、  2009年2月3日火曜日12:12:43 JST 起動  2009年2月3日火曜日12:15:43 JST 終了 のように、文字列を同じ行に書きたいのですが、 どのように記述したらよいでしょうか。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

echo "`/bin/date` 起動" >> log とか?

rem_1982
質問者

お礼

申し訳ありません、私のタイプミスでした。 回答番号No.2の方のご指摘どおり、 ' と ` を混同しておりました。 挙げて頂いた記述で正常に動作しました。 ありがとうございました。

rem_1982
質問者

補足

回答ありがとうございます。 バッチファイルに echo "`/bin/date` 起動" >> log を書き込んだとこと、 logファイルには、  `/bin/date` 起動 と表示されてしまいました。 何かOSに足りないものがあるのでしょうか。 シェルスクリプト?とは違うので冒頭に #!/bin/bash のような記述は必要無いですよね?

その他の回答 (3)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.4

> /bin/bashというプログラミング言語(のようなもの)で動かせ、という意味でよいのでしょうか。 そうですね、確かに「スクリプトを動かす環境」という意味ではインタプリタと変わりないのでそういう解釈でもいいかと思います。 > 何も指定しないと動作しない記述があります(if文とか)。 > 実行した際の言語(何かはわかりませんが)では動かない そういうことです。 もっともif自体は(文法の違いはあれど)持ってないシェルはないはずなので動かないというより文法エラーが出ているような気がしますが。 使っているシェルは環境変数SHELLに入っているはずなので、echo $SHELLで見えるかと思います。

rem_1982
質問者

お礼

回答ありがとうございます。 echo $SHELLを実行してみましたところ、 /bin/bashと出ておりました。 指定しないとエラーも出ているので、かなり重要な一文だったんだと認識できました。 ありがとうございました。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.3

> シェルスクリプト?とは違うので いや、これはシェルスクリプトそのものですよ。 #というか「バッチファイル」と「シェルスクリプト」が同じものというのが正しいかも > #!/bin/bash のような記述 は「そのシェル(上の記述ならbash)で動かす」と明示的に指示するものです。 これがない場合はスクリプトを実行したときのシェルで動作しようとしますが、シェルによりスクリプト文法がまちまちであまり互換がないため普通は指定しておきます。 ただ、どうせbashしか使わないのなら書かなくてもさほど問題にはならないでしょう。

rem_1982
質問者

お礼

回答ありがとうございます。 > #というか「バッチファイル」と「シェルスクリプト」が同じものというのが正しいかも そうなんですか。 なんとなく、 バッチファイルはコンソール上で使えるコマンドを羅列したもので、 シェルスクリプトは、if文など言語らしきものを使っているものかと認識しておりました。 言われてみれば echo 等も「言語らしきもの」でしたね。 「シェル」の意味がいまいち認識しにくいのですが、 ウィキペディアなんかには「ある種のプログラミング言語といえる」とありました。 (他では「おまじない」等とかかれてましたが) これと、 > 「そのシェル(上の記述ならbash)で動かす」と明示的に指示するものです を合わせると、 「#!/bin/bash」と指定した場合は、 /bin/bashというプログラミング言語(のようなもの)で動かせ、という意味でよいのでしょうか。 私のLinux環境では「#!/bin/bash」と書けば動作するのですが、 何も指定しないと動作しない記述があります(if文とか)。 つまり、 /bin/bashという言語?では動くけど、 実行した際の言語(何かはわかりませんが)では動かない、ということですね。

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.2

/bin/date を挟んでいるのは、一重引用符(')ではなく、バッククオート(`)ですが、 タイプミスはありませんか。 やっていることは同じですが、一重引用符(')とバッククオート(`)は紛らわしいので、 echo "$(/bin/date) 起動" >> log としてみてはどうでしょうか。

参考URL:
http://www.booran.com/menu/scr/quote.html
rem_1982
質問者

お礼

回答ありがとうございます。 まさに ' と ` を間違えておりました。 (先に回答いただいた方への返信内容は本文のコピーでした) 正常に動作しました。 挙げて頂いた「echo "$(/bin/date) 起動" >> log」も正常に動きました。 四則演算に使うらしい「expr」も動かないなと思っていましたが、そちらも一重引用符を使っていました。 ありがとうございました。

関連するQ&A