Сценарий оболочки не будет распознавать разделитель heredoc

Я пытаюсь написать очень простой сценарий оболочки в Linux. Сценарий, который я пытаюсь достичь, это:

Создание учетной записи пользователя и предоставление ему внутреннего пароля (для этого не разрешено взаимодействие с пользователем). После успешного завершения просто покажите сообщение пользователю об успешном завершении. Ни один из остальных не должен дублироваться.

В RHEL это оказалось довольно простым, так как команда passwd принимает параметр -stdin, который помог мне передать вход через Pipe. И я перенаправил стандартный вывод в файл журнала. [Не используйте этот код, поскольку он прост и объясняется несколько раз здесь для разных вопросов в StackExcahnge.]

Однако Ubuntu не принимает параметр -stdin для passwd, поэтому мне пришлось использовать метод ниже:

#!/bin/bash useradd -m demo &>path/to/logfile.log passwd demo &>>path/to/logfile.log << EOF myPasswd myPasswd EOF echo "User demo successfully added to the system." 

Теперь проблема здесь в том, что мой вывод не выводит инструкцию echo, а также выводит предупреждение:

 root@ubuntu:~# ./usercreate.sh ./usercreate.sh: line 8: warning: here-document at line 3 delimited by end-of-file (wanted `EOF') root@ubuntu:~# 

вместо ожидаемого:

 root@ubuntu:~# ./usercreate.sh User demo successfully added to the system. root@ubuntu:~# 

Пожалуйста, помогите мне с этими двумя вещами:

  1. Есть ли способ подавить это предупреждение только для этого скрипта?
  2. Почему это не печатает мое заявление эха и как я могу его распечатать?

PS: Еще один способ или идея написать этот скрипт также приветствуется

Спасибо

Related of "Сценарий оболочки не будет распознавать разделитель heredoc"

При использовании нотации HEREDOC вы должны написать закрывающее слово ( EOF в вашем случае) в строке самостоятельно, без каких-либо ведущих или конечных пробелов.

Но в этом случае я бы использовал другой подход:

Вы можете использовать chpasswd . Эта команда поставляется во всех дистрибутивах Linux (что я знаю), и я думаю, что в вариантах UNIX тоже.

Использование довольно просто, вы просто проходите через комбинацию STDIN username:password и это все, одна комбинация в строке. Чтобы изменить пароль для одного пользователя, просто выполните простое эхо:

 echo "demo:myPasswd" | chpasswd