« ◆HTML5-MathMLを実用的にする式変換ツール | トップページ | ◆加速とローレンツ変換:縮んでない状態から縮むか »

bat,sh,csh,ant,make注意点・メモ

個人的メモです。すいません、何度もつまづく個人的注意点を並べただけで、まだ分かりやすい記述に していません。
Windows/UNIX両方で動くモノを作成する場合、BATやシェルの癖や ファイルの文字コードなどで、つまらない時間を取られがち です。

 B-shell雛形

#!/bin/bash
# UTF-8 LF
# このスクリプトを置いてあるフォルダ
THIS_DIR=$(cd $(dirname ${BASH_SOURCE:-$0}); pwd)

# 引数個数チェック
if [ $# -le 3 ]; then echo "引数が足りません";exit 0;fi

# 動作継続の問い合わせ
read -p "処理しますか? (y/n) " ans
if [ $ans != "y" ];then echo "bye!";exit 0;fi

# 他コマンド実行と結果チェック
git xxxx
if [ $? -ne 0  ]; then echo " SOME ERROR OCCURED ";exit 1; fi

echo done
exit 0

 BATの注意点

BATで複雑な作業を行うのは現実的ではない。
ANTなどを用いBATはantの起動とステータスチェックのみ といった形にすべき。

  • 他を呼んだ後のステータスチェックはerrorlevelを見る
    call ant
    if errorlevel 1 goto ERR
    type kekka.txt
    goto END
    :ERR
    echo =========== SOME ERROR OCCURED ==========
    :END
    pause
    
  • 他BAT呼び出しはCALLで
    ANTなどもBATなのでCALL ANTとする
    call ant clean
    
  • COPYには文字列ファイルであっても必ず/Bを付ける
    /Bを付けずにCOPYを行うとUTF-8ファイルなどでは一部文字が化ける
    copy html_1.txt/B+kekka.txt/B+html_2.txt/B sample.html/B
    

 B-shellの注意点

空白文字、とにかく空白文字に注意!!!!

  • 改行がLFであること
    CR/LFになっていると、Commande not found というおバカなメッセージが出る。
    % AA10_test.sh
    AA10_test.sh: Command not found.
      ちゃんとAA10_test.shは存在し、実行フラグも付いており、中の記述も
      問題はない。ただ改行がCR/LFになっているだけ
    
    信じられないことに、これはB-shellのバグではなく 仕様。

  • 他を読んだ後のステータスチェックは$?を見る。
    java -classpath .:../../symphonie.jar MyClass 1> kekka.txt 2> err.txt
    if [ "$?" = "0" ] ; then
     。。。
    else
      。。。
    fi
    
  • 標準出力と標準エラーを画面に出しながらファイルに落とすには
    コマンド 2>&1 | tee log.txt
    
    と書く。

  • 状態チェックは引用符で囲む必要がある
    if [ "$?" = "0" ] ; then
    
  • 記号の前後には空白が必要!!!
    これは最悪の仕様で、多くの人が繰り返し 失敗する。
    if[ "$?" = "0"] ; then
    --- "0"と]の間に空白が無いと
    AA10_test.sh: line 3: syntax error near unexpected token `then'
    AA10_test.sh: line 3: `if[ "$?" = "0"] ; then'
    
    信じられないことに、これはB-shellのバグではなく 仕様。

  • ifの終わりはfi
    「その場での軽い冗談で作った仕様も広く使われることが あるのでこんなふざけたものにしてはならない」という 戒め。
    if [ "$?" = "0" ] ; then
     。。。
    else
      。。。
    fi
    
  • ファイルの最後は"#"だけの行を置く
    コマンドの後ろに改行がないとまともに動かないので、ファイルの 最後に"#"のだけの行を置き、間違いを避けること。
    。。。
    #
    
    信じられないことに、これはB-shellのバグではなく 仕様。

 C-shellの注意点

残念ながらcshが実装されていない環境もある。
残念ながらMakefileではB-shellの使用が標準となっている。

  • 他を読んだ後のステータスチェックは$statusを見る。
    (java -classpath .:../../symphonie.jar MyClass > kekka.txt)|& tee err.txt
    if( $status == 0 )then
       echo "==== DONE ===="
    else
       echo "==== SOME ERROR OCCURED ===="
    endif
    
  • 標準出力と標準エラーを保存仕分けるには括弧を使う。
    (java -classpath .:../../symphonie.jar MyClass > kekka.txt)|& > err.txt
    

 Makeの注意点

タブ。それに尽きる

 ANTの注意点

  • propertyは先に出たもの勝ち。
    importしたファイルでpropertyがセットされていると、import後に 書き換えることはできない。
       <import file="../properties.xml"/>   <!-- dirが定義されているとして -->
       <property name="dir" value="./AAA"/>
    
    当然、定義済みのものを参照して定義を置き換えることはできない。
       <import file="../properties.xml"/>
       <property name="dir" value="${dir}/../AAA"/>
    
  • 基本的に相対ディレクトリを用いて柔軟なディレクトリ 構成をとることはあきらめた方が良い。理由は色々。

  • zipで実行モード付きとするには次のように指定。
          <zip destfile="./SAMPLEs.zip">
              <zipfileset dir="./SAMPLEs" prefix="SAMPLEs"
                          excludes="**/*.csh,**/*.sh" />
              <zipfileset dir="./SAMPLEs" prefix="SAMPLEs"
                          includes="**/*.csh,**/*.sh" filemode="775"/>
    

|

« ◆HTML5-MathMLを実用的にする式変換ツール | トップページ | ◆加速とローレンツ変換:縮んでない状態から縮むか »

トラックバック


この記事へのトラックバック一覧です: bat,sh,csh,ant,make注意点・メモ:

« ◆HTML5-MathMLを実用的にする式変換ツール | トップページ | ◆加速とローレンツ変換:縮んでない状態から縮むか »