2011-03-08 3 views
9

я получаю ошибку ниже при попытке выполнить скрипт, г символов в сценарии оболочки

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

Просьба предложить решение для того же.

Ниже приведены intial линии, используемые в сценарии,

#!/bin/sh 

if [[ $# -lt 1 ]]; then 
    echo "ERROR Environment argument missing <dev,test,qa,prod>" 
    export RC=50 
    exit $RC 
fi 
+1

Каковы первые две или три строки вашего сценария оболочки?:) – sarnold

+0

Пожалуйста, разместите весь сценарий или достаточно его, чтобы люди могли воспроизвести проблему. – Tony

+0

\ r \ n - это оконный конец строки .. сделал ли это писать в окнах? если да, просто перепечатайте его: P – Sigtran

ответ

1

Я получил другое сообщение об ошибке при выполнении скрипта под /bin/sh, но когда я перешел на /bin/bash, он работал отлично:

$ cat foo.sh 
#!/bin/sh 
if [[ $# -lt 1 ]]; 
    then echo "ERROR Environment argument missing" 
    RC=50 
    exit $RC 
fi 
$ sh foo.sh 
foo.sh: 6: [[: not found 
$ bash foo.sh 
ERROR Environment argument missing 

Вы построили bashism. Это может быть или не быть большой проблемой для вашей организации. Если вы хотите использовать bash -специальные функции, измените строку shebang на #!/bin/bash и посмотрите, поможет ли это.

+0

Спасибо, sarnold за ответ. Я попробовал один и тот же скрипт после перехода на bash и отладка включена. Я все еще получаю сообщение об ошибке, Ниже приведен результат, $ bash -xv foo.sh #!/Bin/bash + $ '\ r' : команда not foundnerator.sh: строка 2: если [[$ # -lt 1]]; то эхо "Ошибка среды аргумент отсутствует <устройство, тестирование, контроль качества, прод>" экспорт RC = 50 выход $ RC фи ConstruedTermsXMLGenerator.sh: Строка 7: ошибка синтаксиса около неожиданной лексемы 'ц» ConstruedTermsXMLGenerator.sh: строка 7: 'fi ' – Mohan

+0

@Mohan, то, возможно, @Sigtran верен; этот файл возник из Windows? Если это так, запустите 'dos2unix' или' dtox' или один из этих похожих средств для удаления всех лишних символов '\ r' из файла. – sarnold

+0

Но тот же скрипт отлично работает, когда он помещается в каталог/tmp и выполняется. Как это возможно? – Mohan

13

Ваша проблема заключается в том, что файл имеет окончания строки Windows. Это может быть вызвано редактированием файла в Windows и попыткой запустить его в системе, отличной от Windows.

Вы можете решить эту проблему с помощью dos2unix для преобразования конца строки:

dos2unix ConstruedTermsXMLGenerator.sh 

Соответствующая утилита для преобразования в другом направлении unix2dos.

Некоторые системы имеют fromdos и todos.

+0

@Mohan, если вы используете ftp-скрипт из окон в * nix, убедитесь, что вы передали его как ascii. Если вы scp его, вы должны использовать 'dos2unix' на удаленной стороне. Или используйте текстовый редактор, который можно сохранить в формате «unix». –

+0

Notepad ++ в Windows с использованием кодировки Ansi делает это для sh файлов. Используйте «Сохранить как файл unix bash» вместо «Сохранить». –

0

У меня была эта точная проблема при создании файла .sh на Mac (unix) и его выполнении в Linux. Оказывается, что я должен был установить параметры FileZilla FTP в «Binary» Тип передачи:

  • «Настройки> Трансферы> Типы файлов> По умолчанию тип передачи» в «Binary» (вместо " Авто «)
0

Я имел ту же ошибку, и что я сделал для преобразования символов '\r' в '\n'. используя следующую строку:

tr '\r' '\n' <oldfile.sh> newfile.sh 
mv newfile.sh oldfile.sh 
chmod +x oldfile.sh 
./oldfile.sh 

Я думаю, вы можете также удалить «\ г» символов с помощью:

tr -d '\r' <oldfile.sh> newfile.sh 

tr является команда trasnform и -d это удалить следующий символ.

Я думаю, что оболочка действительно не нравится '\r' знак.

0

Вы можете использовать sed -i 's/\r$//' scriptname.sh

Заменить SCRIPTNAME с действительным именем сценария.

Смежные вопросы