在Windows环境中运行Linux Shell脚本

时间:2012-05-15 06:23:53

标签: linux bash shell unix scripting

我一直在尝试在Windows机器上运行Linux shell脚本。要在Windows环境中运行脚本,我选择了Cygwin。

当我第一次使用cygwin开始运行脚本时,我首先面临以下问题。

line 12: $'\r': command not found

但第12行没有任何命令

  08  #
  09  ######################################################################
  10  #### PARAMETERS TO SET BEGIN
  11  ######################################################################
  12  
  13  # archive setttings
  14  ARCHIVE_USER=abc                      # archive storage user name  (default)
  15  ARCHIVE_GROUP=app                     # archive storage user group (default)
  16  ARCHIVE_PATH=/test/file               # archive storage directory (default)
  17  ARCHIVE_DELAY=+8

要解决此问题,请使用dos2unix命令并从旧版本生成新的shell脚本

当我运行这个新生成的脚本时,它再次返回错误

housekeeper.sh: 2: Syntax error: newline unexpected

以下是dos2unix生成的脚本。

>#!/bin/bash
>>#
>># Date  : 2012-03-22 (yyyy-mm-dd)

有人可以在这里解释我的第二号线的问题。

提前感谢任何帮助

以下是我尝试运行的脚本的顶部,这是我使用dos2unix命令转换后得到的脚本

>#!/bin/bash
>>#
>># Date  : 2012-03-22 (yyyy-mm-dd)
>># Modified by   : ABC
>># Goal          : Draft version for X house keeping environment
>>#
>># Description : This script perform housekeeping of XYS products.
>>#
>>######################################################################
>>#### PARAMETERS TO SET BEGIN
>>######################################################################
>>
>># archive setttings
>>ARCHIVE_USER=user1                               # archive storage user name (default)
>>ARCHIVE_GROUP=gapp                              # archive storage user group (default)
>>ARCHIVE_PATH=/product/file                        # archive storage directory (default)
>>ARCHIVE_DELAY=+8                              # archive files older than delay (in days)
>>
>># purge setttings
>>PURGE_DELAY=+30                                   # purge files older than delay   (in days)

2 个答案:

答案 0 :(得分:2)

这听起来像线路终端问题(Windows使用回车,Linefeed和Unix仅使用Linefeed)。您可以使用dos2unix(和unix2dos)更正这些问题,这会转换行终止符。

尝试:

$ dos2unix myscript.sh

答案 1 :(得分:2)

看起来您的脚本也有“>”在每一行的开头。

这不起作用。

您的第一行必须是#!/bin/bash,而不是>#!/bin/bash

删除前导'>'字符,请尝试以下命令:

sed -i.bak 's/^>*//' housekeeper.sh

(假设您的脚本名为housekeeper.sh)。

这将使用.bak扩展名制作脚本的备份副本,并从文件中的每一行删除所有前导大于号的标记。