1

私は(米国の)Mac(osx 10.8.4)で書いたスクリプトを持っていますが、これはうまく機能します。次に、別の(ヨーロッパの)Mac(osx 10.8._)を使用している誰かに電子メールで送信しましたが、次のように不平を言っています:

syntax error near unexpected token `$'{\r''

いくつかの空白行、およびcaseステートメントの最後。他にはありません。

私はこの解決策を見つけ、最終的に問題を解決したのは、というコードを使用することでしたdos2unix

私の質問は、これらのDOSエスケープ文字はどこから来たのですか?!


プロセス: Terminal.app を介して emacs でプログラムを作成しました。Mail.appでメールに添付して送信しました。また、textedit で開いて、すべてのテキストを選択し、コピーして Mail.app 電子メールに貼り付けてみました。Gmail で同じこと (添付ファイルとコピー アンド ペースト) を行いました (Chrome ブラウザを使用)、同じ問題。


問題のスクリプト(***エラーのある行に追加):

#!/bin/sh
                                                                          ***
DIR="mhd_3/"
APP="/Users/lzkelley/Applications/athena/athena4.1/vis/vtk/join_vtk"
FNAME="lzk_flux-cap-1"
LOG_FLAG=False
                                                                          ***
# --- Check for Command Line Arguments ---
                                                                          ***
while getopts hp:s:i:f:l: opt; do
    case "$opt" in                                                        ***
        #p) NUM_PROCS=$OPTARG;;
        #s) NUM_SNAPS=$OPTARG;;
        i) DIR=$OPTARG;;
        f) FNAME=$OPTARG;;
        l) LOG_FLAG=True; LOG=$OPTARG;;
        h) usage;;
        \?) printf "Invalid Option!\n"; usage;;
    esac
done
                                                                          ***
printf "\nprocess_vtk.sh\n\n"
                                                                          ***
# Make sure directory ends with slash
DIR=$(echo "$DIR"|sed 's/\/$//g')                                                                   # Remove slash if it has it
DIR=$DIR/                                                                                           # Add slash

NUM_PROCS=$(find $DIR -type dir -name "id*" | wc -l)                                            # Use word count to find num directories matching (id*) in output folder
NUM_SNAPS=$(find $DIR'/id0/' -name "$FNAME*.vtk" | wc -l)                                       # Use word count to find num vtk files in target directory


# Adjust numbers for loops (i.e. 0 to [NUM-1] )
let "NUM_PROCS -= 1"
let "NUM_SNAPS -= 1"

# Iterate through each snapshot
for NS in `seq 0 $NUM_SNAPS`; do
    printf -v jj ".%04i." $NS                                                                       # Assume 4 digit numbering
    OUTNAME=$DIR$FNAME".all"$jj"vtk"                                                                # Construct output filename from directory, file name base, and number
    INNAMES=""                                                                                      # Names of input vtk files (for each processor)

    # Iterate through each processor
    for NP in `seq 0 $NUM_PROCS`; do

        # Names are slightely different for 0th processor
        if [ $NP = 0 ]; then
            THIS=$DIR"id"$NP"/"$FNAME$jj"vtk"                                                       # Name of single vtk file
            if [ -e "$THIS" ]; then
                INNAMES=$INNAMES$THIS                                                               # Append to list
            fi
        else
            THIS=$DIR"id"$NP"/"$FNAME"-id"$NP$jj"vtk"                                               # Name of single vtk file
            if [ -e "$THIS" ]; then
                INNAMES=$INNAMES" "$THIS                                                            # Append to list
            fi
        fi
    done # NP

    echo $APP -o $OUTNAME $INNAMES

    # Call the program to merge vtk files
    $APP -o $OUTNAME $INNAMES


done # NS
4

1 に答える 1

1

電子メールで空白が保持されるという保証はありません。さまざまな MTA が変更を加えます。また、クライアントで平文と多くの場合 HTML との間でコピー アンド ペーストを行う場合も同様です。

スクリプトが両端で同じであることを確認したい場合は、スクリプトを圧縮してバイナリ形式で送信することをお勧めします。

于 2014-04-30T01:57:42.683 に答える