Часть, которая считывает вводимые пользователем данные, должна выполняться на переднем плане. Только процесс переднего плана может читать с терминала.
Синтаксис вашего условия if не имеет смысла: $ tt> 0
запускает команду, имя которой находится в переменной tt
¹, и перенаправляет ее вывод в файл с именем 0
. Для сравнения чисел используйте синтаксис […]
для условных выражений или синтаксис ((…))
для арифметических выражений.
Фигурные скобки в операторе if бесполезны: then… fi
уже создает такую же группировку.
{1..100000}
расширяется до 100000 слов, а затем обрабатывает их одно за другим. Чтобы цикл выполнялся 100000 раз, используйте счетчик цикла.
Печатать строку каждые 2 секунды для меня не имеет смысла, но, поскольку я понятия не имею, что вы собираетесь делать, я оставлю это.
#!/bin/bash
one () {
echo "Please enter some input: "
read tt
echo "You entered: $tt"
}
tho () {
if [ "$tt" -gt 0 ]; then
for ((i=0; i<=100000; i++)); do
echo $i $i
sleep 2s
done
fi
}
one
tho
Если вы хотите, чтобы часть tho
работала в фоновом режиме, добавьте &
после tho
.
¹ Приблизительно.
echo
ничего не делает со стандартным вводом; он только анализирует его параметры. Таким образом, вы фактически запускаете echo
, который сам по себе выводит одну пустую строку, а стандартный ввод отбрасывается.
Если вы хотите увидеть поведение, которое пытаетесь реализовать, используйте инструмент, предназначенный для анализа стандартного ввода, напримерcat
:
$ pwd | cat
/home/username
Если вы действительно хотите использовать echo
для отображения текущего рабочего каталога (или вывода другой команды ), вы можете использовать подстановку команд, чтобы сделать это за вас:
$ echo "Your shell is currently working in '$(pwd)'."
Your shell is currently working in '/home/username'.
Команда echo
не читает со стандартного ввода, она записывает то, что вы ей говорите. В этом случае вы ничего не говорили ему писать, поэтому он напечатал только новую строку. pwd | echo
эквивалентно простому запуску echo
.
Если вы хотите использовать канал, вам нужно использовать какую-то команду, которая читает из стандартного ввода (, например,cat
):
$ pwd | cat
/path/to/current/directory
$
Как указано в других ответах, echo
не читается со стандартного ввода, поэтому он не будет печатать вывод pwd
. На всякий случай, если вы еще не знаете, pwd
печатает свой вывод сам по себе, поэтому вам просто нужно запустить его в одиночку, чтобы получить желаемый результат.
$ pwd
/current/working/dir
Если вы действительно хотите использовать эхо для этого, вы можете использовать Подстановку команд . Это передаст вывод вашей команды(pwd
)в echo
в качестве параметра. Что опять же в этом примере не требуется, так как pwd
будет выводить свой собственный... вывод на стандартный вывод.
$ echo "$(pwd)"
/current/working/dir