0

このスクリプトの 5 行目の何が問題になっていますか (エラーを表示するスニペットを含めました。実際のエラーは、コードの後の下部にリストされ、完全なスクリプトへのリンクが表示されます)。

#! /bin/bash
INSTALLDIR=/usr/local/mapguideopensource
CLEAN_FLAG=0
while [ $# -gt 0 ]; do    # Until you run out of parameters...
  case "$1" in
    -prefix|--prefix)
        INSTALLDIR="$2"
        shift
        ;;
    -clean|--clean)
        CLEAN_FLAG=1
        shift
        ;;
    -help|--help)
        echo "Usage: $0 (options)"
        echo "Options:"
        echo "  --prefix [installation directory]"
        echo "  --clean [clean all objects and binaries in Oem]"
        echo "  --help [Display usage]"
        exit
        ;;
esac
shift   # Check next set of parameters.
done

これは、Linux (REHL5) でこの bash スクリプトを実行したときに発生するエラーです。

: command not founde 4:  
: command not founde 8:  
: command not founde 8:  
: command not founde 12:  
MapGuide Open Source build script for OEM components  
'/build_oem.sh: line 17: syntax error near unexpected token `in  
'/build_oem.sh: line 17: `    case "$1" in  

上記の行番号は、私が実行している実際のスクリプトに対応していることに注意してください (以下にそのスクリプトへのリンクを含めました) 私が実行している元のスクリプト

4

3 に答える 3

6

エラーから、行末にキャリッジ リターン (別名 CR または ^M) があることがわかります。Windows/DOS テキスト ファイルでは、各行の末尾にキャリッジ リターンと改行がありますが、UNIX プログラム (bash など) は改行を期待するだけで、CR もあるとひどく混乱します。景品は、次のようなエラー メッセージです。

: command not founde 4:

これは実際には です./build_oem.sh: line 4: ^M: command not foundが、キャリッジ リターンによって端末が行頭に戻り、メッセージの末尾をメッセージの先頭に上書きします。

./build_oem.sh: line 4: 
: command not found
       |
       V
: command not founde 4:

スクリプトを修正するには、dos2unix を使用して適切な UNIX 形式に変換してから、Unix 形式で保存するテキスト エディタに切り替えます。

于 2013-05-11T00:04:53.620 に答える
4

choroba が言うことですが、シバンが最初の行にある必要があることにも注意してください (そうではありません) bash

于 2013-05-10T23:08:15.040 に答える
1

元のスクリプトでは、4 行目と 8 行目が空です。行に目に見えない制御文字がある可能性があります。試してみてくださいxxd build_oem.sh

于 2013-05-10T23:01:10.963 に答える