1

私はWindowsマシンでLinuxシェルスクリプトを実行しようとしています。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コマンドを使用して、古いものから新しいシェルスクリプトを生成しました

この新しく生成されたスクリプトを実行すると、再びエラーが返されます

housekeeper.sh: 2: Syntax error: newline unexpected

以下は、dos2unixで生成されたスクリプトです。

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

誰かがここの行番号2の何が問題なのか説明してもらえますか。

助けてくれてありがとう

以下は私が実行しようとしているスクリプトのトップです、これは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)
4

2 に答える 2

2

これは回線終了の問題のように聞こえます(Windowsはキャリッジリターンを使用し、LinefeedとUnixはLinefeedのみを使用します)。これらの問題は、ラインターミネータを変換するdos2unix(および)を使用して修正できます。unix2dos

試す:

$ dos2unix myscript.sh
于 2012-05-15T06:39:34.583 に答える
2

また、スクリプトのすべての行の先頭に「>」が付いているように見えます。

それはうまくいきません。

最初の行は#!/bin/bash、ではなく、である必要があり>#!/bin/bashます。

先頭の「>」文字を削除するには、次のコマンドを試してください。

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

(スクリプトの名前がhousekeeper.shであると想定します)。

これにより、拡張子が付いたスクリプトのバックアップコピーが作成.bakされ、ファイルの各行から先頭の大なり記号がすべて削除されます。

于 2012-05-15T13:39:01.577 に答える