2009-09-03 2 views
3
#!/bin/bash 
echo 'first line' >foo.xml 
echo 'second line' >>foo.xml 

Я новичок в оболочке сценариев.простой скрипт оболочки в cygwin

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

Однако, когда я исполняю выше сценарий, я вижу содержимое происходит некорректно в foo.xml:

second line 

Второй раз, когда я запустить сценарий, я вижу в foo.xml:

second line 
second line 

и так далее.

Кроме того, я вижу следующее сообщение об ошибке отображается в командной строке после выполнения сценария:

: No such file or directory.xml 

я в конечном итоге будет запущен скрипт на коробке Unix, я просто пытаюсь развивать его с помощью Cygwin. Поэтому я был бы признателен, если бы вы могли указать, является ли это странностью cygwin, и если да, не следует ли мне пытаться использовать cygwin для разработки таких скриптов?

Заранее спасибо.

ответ

7

Запустите dos2unix в скрипте оболочки. Это устранит проблему.

+0

Да. Вот и все! Спасибо!! – Kapsh

+0

Рад, что я мог помочь, чувак. –

1

Но здесь должно быть что-то еще. Когда я пытаюсь, он работает так, как ожидалось.

> foo.xml помещает строку в foo.xml, заменяя любое предыдущее содержимое. >> foo.xml прилагается к файлу

+0

ты в cywgin? – Kapsh

0

Звучит так, как будто у вас может быть опечатка. Также имейте в виду, что, хотя командная строка Windows может прощать о путях со встроенными пространствами, оболочек cygwin не будет, поэтому, если у вас есть имя файла, содержащее встроенные пространства, вам нужно либо указать имя файла, либо избежать пробелов:

echo 'first line' > 'My File.txt' 
echo 'first line' > My\ File.txt 

То же самое касается определенных «специальных» символов, включая кавычки, амперсанд (&), точки с запятой (;) и, как правило, большинство знаков препинания, отличных от периода/полной остановки (.).

Так что если вы видите эти проблемы, используя точный скрипт, который вы используете (т. Е. Вы копируете и вставляете его, нет возможности ошибок транскрипции), тогда может произойти что-то действительно странное, что я не могу объяснить. В противном случае может быть место, в котором отсутствует место или символ без кавычек.

0

Я не могу воспроизвести ваши результаты. Сценарий, который вы цитируете, выглядит корректно и действительно работает так, как ожидалось, в моей установке Cygwin здесь, создавая файл foo.xml, содержащий строки first line и second line; подразумевая, что то, что вы на самом деле выполняете, отличается от того, что вы цитировали каким-то образом, что вызывает проблему.

Сообщение об ошибке подразумевает какую-то проблему с именем файла в первой строке echo. У вас есть некоторые непечатаемые символы в скрипте, который вы используете? Вы пропустили пробел в имени файла? Вы вытесняете переменные оболочки и замалчиваете имя переменной или не можете избежать получающейся строки?

1

выше должен нормально работать .. Однако вы всегда можете указать Heredoc:

#!/bin/bash 
cat <<EOF > foo.xml 
first line 
second line 
EOF 
Смежные вопросы