2015-05-08 2 views
3

У меня есть этот скрипт:переменная в Баш скрипт не работает, как ожидалось

#!/bin/bash 
VAR="eric.sql" 
sudo mysqldump -c -u username -p1234 dbname > $VAR 

Но если я запустить этот сценарий, я получаю эту ошибку:

: Protocol error 3: mysql-export.sh: cannot create eric.sql 

Но если я не использую переменную , но только это:

#!/bin/bash 
VAR="eric.sql" 
sudo mysqldump -c -u username -p1234 dbname > eric.sql 

... он хорошо работает. Что я не так?

+3

Есть ли у вашего сценария линейные окончания DOS? Dos работает 'dos2unix' на этом проблема? –

+2

Боковое примечание (основная проблема почти наверняка, как предлагает Etan): Всегда цитируйте свои расширения. '>" $ var "', а не '> $ var'. В противном случае имена файлов с пробелами в них не будут работать. Также: не используйте имена всех верхних букв для собственных переменных; по соглашению, такие имена зарезервированы для встроенных оболочек оболочки и переменных среды; использование имен нижнего регистра для ваших собственных переменных означает, что вы не будете перезаписывать то, что меняется, как другие программы ведут себя по ошибке. –

+1

Кстати, из любопытства, в чем тут ОС и файловая система? Большинство файловых систем UNIX позволят создавать файлы с '$ '\ r'' (то есть символами перевода строки) в их именах, такими же запутанными, как и последствия этого. –

ответ

1

Проблема заключалась в том, что сценарий был перерывы стиль линии для Windows (я использовал блокнот). После того, как я использовал Nano, напишите сценарий, который он решил.

Спасибо за ответы!

-2

sudo может изменять переменную $ PATH, в зависимости от вашей политики безопасности.

-E The -E (preserve environment) option will override the env_reset 
     option in sudoers(5)). It is only available when either the match- 
     ing command has the SETENV tag or the setenv option is set in sudo- 
     ers(5). 

Вы можете добавить полный путь к файлу, или удалить sudo в этом сценарии. Это также должно работать:

sudo PATH="$PATH" mysqldump -c -u username -p1234 dbname > $VAR 
+3

'$ VAR' расширяется, и stdout открывается, чтобы указать на пункт назначения, прежде чем' sudo' будет запущен. Таким образом, 'sudo' не может изменить способ перенаправления. –

+0

Что касается 'PATH' - проблема заключается не в неспособности найти/выполнить' mysqldump'. –

+0

@CharlesDuffy, нет проблем в том, что он не может записать файл в этой папке. Кроме того, найдите параметр 'env_reset' для sudo. – FeedTheWeb

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