Cygwin没有正确运行脚本

时间:2011-10-24 20:21:20

标签: linux bash cygwin

您好我正在尝试在cygwin中运行此脚本,但它无法正常工作。它在linux下运行时工作正常。

错误:

$ ./script2.txt >> count.txt
./script2.txt: line 3: syntax error near unexpected token `|'
'/script2.txt: line 3: `    | grep PlayerCount \

原始剧本:

#!/usr/bin/bash
wget --output-document=- http://runescape.com/title.ws 2>/dev/null \
    | grep PlayerCount \
    | head -1l \
    | sed 's/^[^>]*>//' \
    | sed "s/currently.*$/$(date '+%r %b %d %Y')/"

有人要求:

$ od -a script2.txt
0000000   #   !   /   u   s   r   /   b   i   n   /   b   a   s   h  cr
0000020  nl   w   g   e   t  sp   -   -   o   u   t   p   u   t   -   d
0000040   o   c   u   m   e   n   t   =   -  sp   h   t   t   p   :   /
0000060   /   r   u   n   e   s   c   a   p   e   .   c   o   m   /   t
0000100   i   t   l   e   .   w   s  sp   2   >   /   d   e   v   /   n
0000120   u   l   l  sp   \  cr  nl  sp  sp  sp  sp   |  sp   g   r   e
0000140   p  sp   P   l   a   y   e   r   C   o   u   n   t  sp   \  cr
0000160  nl  sp  sp  sp  sp   |  sp   h   e   a   d  sp   -   1   l  sp
0000200   \  cr  nl  sp  sp  sp  sp   |  sp   s   e   d  sp   '   s   /
0000220   ^   [   ^   >   ]   *   >   /   /   '  sp   \  cr  nl  sp  sp
0000240  sp  sp   |  sp   s   e   d  sp   "   s   /   c   u   r   r   e
0000260   n   t   l   y   .   *   $   /   $   (   d   a   t   e  sp   '
0000300   +   %   r  sp   %   b  sp   %   d  sp   %   Y   '   )   /   "
0000320

2 个答案:

答案 0 :(得分:2)

你有DOS风格的行结尾。我怀疑这是造成这个问题的原因:

0000120   u   l   l  sp   \  cr  nl  sp  sp  sp  sp   |  sp   g   r   e

那里应该只有nl。但是,您正在将文件传输到Linux或从Linux传输文件正在对您进行行结束转换。

尝试flipconvd2udos2unix等进行修复。

答案 1 :(得分:2)

你需要你的文件没有窗口式的行结尾。

dos2unix script2.txt script2.txt

或者,使用编辑器设置行结尾。例如,在vim中,您将使用:set ff=unix