Как упоминалось в комментарии Deathgrip, вы должны убить родительский процесс sleep
, который вы можете найти с некоторыми вариациями ps | grep sleep
(ps
, имеет много реализаций, поэтому я не буду угадывать, какие именно флаги вам нужно предоставить или какие ваш вывод выглядит так. Проверитьman ps
)
Что происходит? Когда вы убиваете sleep
, он завершается, но это не влияет на выполнение содержащего скрипта... он просто переходит к следующей строке, и цикл продолжает повторяться. Есть несколько способов изменить скрипт, чтобы убить сон работало. Один из самых простых — сделать это:sleep 5 || exit
.
В качестве альтернативы, если вы используете Bash (другие? ), вы можете просто добавить эту строку в начало :set -e
. Это говорит Bash о завершении сценария, если какая-либо команда внутри завершается ошибкой (, т.е. возвращает не -нулевой статус ). Но это влияет на все в вашем сценарии и имеет ряд других ловушек, поэтому лучше избегать этого решения. (Вы можете добавить set -e
в строку перед сном и отключить с помощью set +e
сразу после него, но это становится несколько нелепым, поскольку вы можете просто использовать первое решение, о котором я упоминал.)
Переменные не раскрываются внутри фигурных скобок. Попробуйте вместо этого:
start=1;
end=10;
for ((i=$start; i<=$end; i++))
do
mkdir "$i"
done