Рейтинг:0

Выполнять команды, которые запускаются в оболочке как скрипт

флаг in

Выполнение следующих команд в оболочке выполняется без проблем:

ssh user@machine статус systemctl my-service.service
ssh user@machine sudo systemctl остановить my-service.service
scp -r ./мой-сервис/* пользователь@машина:/домашний/пользователь/мой-сервис
ssh user@machine chmod +x /home/user/my-service/my-service
ssh user@machine sudo systemctl запустить my-service.service
ssh user@machine sudo systemctl статус my-service.service

Однако, помещая это в развернуть.sh file приводит к тому, что ни одно из вышеперечисленных действий не может быть выполнено.

Ошибки:

  • Недопустимое имя модуля "my-service" было экранировано как "my-service\x0d" (может быть, вам следует использовать systemd-escape?)
  • Не удалось найти модуль my-service\x0d.service.
  • Недопустимое имя модуля «my-service.service» было экранировано как «my-service.service\x0d» (возможно, вам следует использовать systemd-escape?)
  • Не удалось остановить my-service\x0d.service: модуль my-service.service\x0d.service не загружен. : Нет такого файла или директории/
  • chmod: невозможно получить доступ к '/home/user/my-service/my-service'$'\r': нет такого файла или каталога
  • Недопустимое имя модуля «my-service.service» было экранировано как «my-service.service\x0d» (возможно, вам следует использовать systemd-escape?)
  • Не удалось запустить my-service.service\x0d.service: модуль my-service.service\x0d.service не найден. Недопустимое имя модуля «my-service.service» было экранировано как «my-service.service\x0d» (возможно, вам следует использовать systemd-escape?)
  • Не удалось найти модуль my-service.service\x0d.service.

Некоторые были разбиты. Кажется, что-то связанное с побегом. По какой-то причине добавление пробела в конце строк делает это своего рода работой, но все же не без ошибок.

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

Рейтинг:2
флаг cn

Я бы поставил доллары на пончики, которые вы редактировали этот файл на или из Окна машина.

Linux использует \x0a (код ASCII 10) для разделения строк в файле (или сценарии).
Windows использует комбинацию \x0d ("Carriage_Return", код ASCII 13) и \x0a ("перевод строки", ASCII 10) для выполнения тем же работа.

Дайте файл, отредактированный Windows, машине с Linux, и она увидит каждая строка как наличие постороннего \x0d на конце.

Получите себе приличный Редактор Windows (Блокнот++ бесплатна и настоятельно рекомендуется) или узнайте, как использовать ви. Конечно, у него есть своя кривая обучения, но некоторые из его возможностей могут вас удивить!

флаг in
Я чувствую себя ооочень глупо :-) Вот и все, я отредактировал файл в vscode. Изменил с CRLF на LF в правом нижнем углу, сохранил его, и он заработал без проблем.

Ответить или комментировать

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