【问题标题】:DOS escape characters in unix filesunix 文件中的 DOS 转义字符
【发布时间】:2013-08-21 14:48:25
【问题描述】:

我在我的(美国)mac (osx 10.8.4) 上编写了一个脚本,效果很好。然后我将它通过电子邮件发送给使用另一个(欧洲)mac(osx 10.8._)的人,它抱怨说:

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

在几个空行和case 语句的末尾。没有别的地方了。

I found this solution,最终解决问题的方法是使用名为 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

【问题讨论】:

  • 复制/粘贴,邮件用户代理,...有很多可能性。
  • @devnull 为什么要复制粘贴呢?此外,在没有复制和粘贴的情况下附加了文件 - 问题仍然存在。通过 Mail.app 和 GMail 都试过了;作为附件和复制/粘贴
  • 邮件用户代理经常做一些有趣的事情。
  • 这些都是完全没有帮助的 cmets。
  • 您究竟是如何通过电子邮件发送的?使用什么程序和什么程序?那么接收方是如何提取它的,用什么程序和程序呢?也许更重要的是,如果您对原始脚本文件执行 od -c,您是否在错误行的末尾看到 \r 字符?

标签: bash unix escaping character dos


【解决方案1】:

无法保证电子邮件中会保留空白。不同的 MTA 会进行修改,当您在纯文本和客户端中通常是 HTML 的内容之间复制和粘贴时,客户端也会进行修改。

如果您想确保两端的脚本相同,最好的办法是将其压缩并以二进制形式发送。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 2020-01-27
    相关资源
    最近更新 更多