我一直在尝试在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)
答案 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
扩展名制作脚本的备份副本,并从文件中的每一行删除所有前导大于号的标记。