Вызов команды Django из сценария оболочки отличается от ручного вызова

#django #linux #bash #shell

#django #linux #bash #оболочка

Вопрос:

Итак, у меня есть этот небольшой простой сценарий оболочки под названием refre.sh , который будет обновляться из svn и вызывать команду Django:

 echo "Refresh..."
svn update
python manage.py collectstatic --noinput --settings=settings.prod
  

Когда я выполняю скрипт с ./refre.sh , выводится:

 Refresh...
'nknown command: 'update
Type 'svn help' for usage.
Unknown command: 'collectstatic'
Type 'manage.py help' for usage.
  

но когда я набираю команды вручную в командной оболочке, я получаю правильный вывод.

Это навело меня на мысль, что существует проблема со средой или что-то в этом роде, потому что у меня локально установлен Django, а не глобальная установка (также локально установлен python, но я ввел полный путь к правильному python, и это не помогло).

Итак, нужно ли мне устанавливать некоторые переменные среды или чего мне не хватает?

Комментарии:

1. как вы выполняете этот скрипт?

2. скрипт вызывается refresh.sh так я это называю./refresh.sh

Ответ №1:

Прежде всего, вы должны иметь #!/bin/sh перед первой строкой сценария.

И, конечно, вы должны проверить, что используемый вами редактор сохраняет окончания строк в UNIX, а не в Windows (). ( n ).)……….. ( rn ).

Комментарии:

1. сделал это, и это только усугубило загадку: теперь там написано: «sh: . /refre.sh : /bin/sh ^M: плохой интерпретатор: такого файла или каталога нет». Понятия не имею, что это за «^ M» ~ X (

2. ^M — это r, другими словами, окончание строки DOS / Windows. Что вы используете для редактирования этого файла?

3. Вот и все!!! Проблема с новой строкой в Windows. Можете ли вы опубликовать это как ответ вместо комментария, чтобы все остальные это увидели?