Задания Cron не запущены. Демон Cron не работает

Вы просили ответить на два вопроса:

  1. Вы попросили объяснить, почему ваш текущий код не дает ожидаемого результата.

  2. Вы спросили, как правильно написать код, чтобы он выдавал ожидаемый результат.

Глядя на ваш код, я вижу два вероятных объяснения того, почему вы написали свой код так, как сделали:

  1. Может возникнуть некоторая путаница в синтаксисе цикла for -.

  2. Возможна некоторая путаница в порядке вычислений в так называемой простой команде .

для синтаксиса цикла -

В первом случае я бы сказал, что вы пропустили точку с запятой после присваивания переменной. Если вы хотите записать цикл for -в одну строку, вам нужно поставить двоеточие -после каждой команды в теле цикла. Попробуйте вместо этого:

for i in {1..5}; do x="${i}"; echo "$x"; done

Другим вариантом может быть запись цикла for -с использованием многострочного синтаксиса -с переводом строки вместо точки с запятой:

for i in {1..5}
do
x="${i}"
echo "${x}"
done

Вы также можете смешивать -и -для соответствия точкам с запятой и символам новой строки, например.:

for i in {1..5}; do
x="${i}"; echo "${x}"
done

оценка простых команд

Во втором случае я бы сказал, что вы, вероятно, предполагали, что присваивание переменной в прологе команды (, т.е. присваивание x="$i"), происходит до раскрытия переменной в теле команды (т.е. расширение ${x}вecho "${x}"). Но на самом деле это не так.Чтобы убедиться в этом, мы можем обратиться к странице, посвященной расширению простых команд в Руководстве Bash, или к подразделу о простых командах в Спецификации Posix . Обе эти ссылки включают следующий отрывок:

A "simple command" is a sequence of optional variable assignments and redirections, in any sequence, optionally followed by words and redirections, terminated by a control operator.

When a given simple command is required to be executed (that is, when any conditional construct such as an AND-OR list or a case statement has not bypassed the simple command), the following expansions, assignments, and redirections shall all be performed from the beginning of the command text to the end:

  1. The words that are recognized as variable assignments or redirections according to Shell Grammar Rules are saved for processing in steps 3 and 4.

  2. The words that are not variable assignments or redirections shall be expanded. If any fields remain following their expansion, the first field shall be considered the command name and remaining fields are the arguments for the command.

  3. Redirections shall be performed as described in Redirection.

  4. Each variable assignment shall be expanded for tilde expansion, parameter expansion, command substitution, arithmetic expansion, and quote removal prior to assigning the value.

Обратите внимание, что на шаге 2 происходит расширение переменной в команде, но шаг 1 говорит нам, что назначения переменных сохраняются до шагов 3 и 4. Отсюда следует, что выражение echo "${x}"расширяется до echo ""перед имеет место присвоение x="${i}". Это объясняет, почему вы получали пустой вывод.

Дальнейшее обсуждение этой темы см. в следующих сообщениях:

1
09.01.2020, 18:29
1 ответ

Я пока не могу комментировать, поэтому я должен опубликовать это как ответ.

Вы не упомянули, проверяли ли вы файл /var/log/auth.log.

Эта ошибка обычно вызывается модулем pam, поэтому этот журнал может дать вам некоторые подсказки.

0
27.01.2020, 23:55

Теги

Похожие вопросы