почему не работает передача pwd и echo? [дубликат]

Часть, которая считывает вводимые пользователем данные, должна выполняться на переднем плане. Только процесс переднего плана может читать с терминала.

Синтаксис вашего условия 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 .

¹ Приблизительно.

2
27.07.2018, 18:06
3 ответа

echoничего не делает со стандартным вводом; он только анализирует его параметры. Таким образом, вы фактически запускаете echo, который сам по себе выводит одну пустую строку, а стандартный ввод отбрасывается.

Если вы хотите увидеть поведение, которое пытаетесь реализовать, используйте инструмент, предназначенный для анализа стандартного ввода, напримерcat:

$ pwd | cat
/home/username

Если вы действительно хотите использовать echoдля отображения текущего рабочего каталога (или вывода другой команды ), вы можете использовать подстановку команд, чтобы сделать это за вас:

$ echo "Your shell is currently working in '$(pwd)'."
Your shell is currently working in '/home/username'.
6
27.01.2020, 21:50

Команда echoне читает со стандартного ввода, она записывает то, что вы ей говорите. В этом случае вы ничего не говорили ему писать, поэтому он напечатал только новую строку. pwd | echoэквивалентно простому запуску echo.

Если вы хотите использовать канал, вам нужно использовать какую-то команду, которая читает из стандартного ввода (, например,cat):

$ pwd | cat
/path/to/current/directory
$ 
1
27.01.2020, 21:50

Как указано в других ответах, echoне читается со стандартного ввода, поэтому он не будет печатать вывод pwd. На всякий случай, если вы еще не знаете, pwdпечатает свой вывод сам по себе, поэтому вам просто нужно запустить его в одиночку, чтобы получить желаемый результат.

$ pwd
/current/working/dir

Если вы действительно хотите использовать эхо для этого, вы можете использовать Подстановку команд . Это передаст вывод вашей команды(pwdechoв качестве параметра. Что опять же в этом примере не требуется, так как pwdбудет выводить свой собственный... вывод на стандартный вывод.

$ echo "$(pwd)"
/current/working/dir
3
27.01.2020, 21:50

Теги

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