Почему нельзя изменить входные данные, если объявление переменной находится внутри цикла for в bash - PullRequest
0 голосов
/ 21 января 2019

Итак, я пытаюсь сделать бесконечный цикл, который создает библиотеки.

, но файловая переменная принимает ввод только один раз.

код:

for (( ; ; ))
do
    file=${1?Error: no input}
    mkdir "$file"
    sleep 1
done

1 Ответ

0 голосов
/ 21 января 2019

В этом цикле нет ничего, что требовало бы ввода. $1 предоставляется пользователем один раз, когда он запускает скрипт (еще до того, как цикл запускается). Стандартный способ запроса ввода в сценарии оболочки - команда read. Примерно так:

while read -p "Enter a directory to create: " file; do
    mkdir "$file"
done

Этот цикл завершится, когда он получит конец файла, что означает, что пользователь должен нажать Control-D, чтобы выйти из него. Если вы хотите выйти, если пользователь просто нажимает return, ничего не вводя, вы можете сделать это:

while read -p "Enter a directory to create: " file; do
    if [ -z "$file" ]; then
        echo "Error: no input" >&2
        break    # This exits the while loop
    fi
    mkdir "$file"
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...