как отменить задания на печать за определенный месяц в Unix

[[ … ]]оценивает условное выражение . В условном выражении -z— это оператор, который принимает строку в качестве аргумента и возвращает true, если строка пуста, и false в противном случае.

В for ((…; …; …))каждая из трех частей, разделенных точкой с запятой -внутри двойных скобок, является арифметическим выражением . В арифметическом выражении -является оператором отрицания или вычитания. z— ссылка на переменную z,оценка до 0, если переменная не определена. Поэтому, когда вывод lsof -i4TCP:8083 -sTCP:LISTEN -tпуст, а zне определен, выражение оценивается как 0, поэтому цикл завершается. Если выходные данные не пусты, это может привести к синтаксической ошибке в арифметическом выражении. То, что вы написали, просто не имеет смысла в арифметическом выражении.

Эта форма forпредназначена для итераций, определяемых арифметическим путем, обычно от некоторого начального значения до некоторого конечного значения. Кажется, вам нужен цикл while, поэтому напишите цикл while и используйте условное выражение.

while [[ -z $(lsof -i4TCP:8083 -sTCP:LISTEN -t) ]]; do
    echo "waiting for startup"
    sleep 1
done

См. также круглые и фигурные скобки в bash .

-2
25.02.2020, 16:33
0 ответов

Теги

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