Как писать и читать одновременно вывод stdin? Можно ли сделать? Так что, когда вы что-то пишете, это одновременно должно отражать ваш вклад.
Я нашел и пример, в котором используются stdin, stdout и pipe, но я не знаю, как его использовать в моем случае
<input-file.txt commandA | commandB >output-file.txt
Извините за плохое объяснение. Вы правы, я должен дать одну команду, которая записывает и читает вывод записи. И они должны быть разделены трубкой ..
Если вы хотите написать «одну команду», то что такое «они»? Похоже, вы просто хотите записать cat | cat
! Вы хотите написать команду, которая считывает собственный вывод? Вам, вероятно, понадобится фифо.
о, извините, я имею в виду stdin и stdout
Итак, в основном задача состоит в том, чтобы использовать stdin, stdout и pipe
@WilliamPursell: на многих платформах можно использовать write(2)
для записи в fd 0 и read(2)
для чтения из fd 1 (из C), это до чертиков пугает людей, когда они видят, что это работает. Плохая идея, но весело.
Примерно так должно работать:
#!/bin/bash
echo Enter your answer:
read variable
echo ${variable}
Он попросит вас ввести значение, вы его введете, и он выведет его, как только вы нажмете Enter
.
Обновлять
Это также будет работать как одна команда:
read variable && echo ${variable}
Спасибо за ответ. Но я искал одну команду, которая показывает вывод из командной строки ...
Можете ли вы дополнить свой вопрос примером того, что вы ищете?
@asel Обновил мой ответ однострочным.
Спасибо, это тоже работает, но моя задача - использовать перенаправление stdin и stdout .. ((
Если я тебя понимаю ...
cat < a > b
Это перенаправление ввода от a и перенаправление вывода на b. Вы этого хотели?
Попробуй это.
cat
Он будет сидеть и ждать вас, потому что по умолчанию терминал - STDIN.
Наберите что-нибудь и нажмите - он вам ответит, потому что по умолчанию STDOUT идет в консоль. Он будет продолжать делать это до тех пор, пока вы не введете ему символ EOF или не сломаете программу каким-либо другим способом, например CTRL-C.
Если вам нужна труба,
cat | cat
будет (бессмысленно) делать то же самое.
Чтобы объединить их для бесплатного использования как каналов, так и перенаправлений -
cat < a | cat > b
Вы можете дать более четкие требования?
Я не уверен ... Итак, когда вы выполняете команду, вы должны иметь возможность что-то написать, и когда вы нажмете Enter, она покажет вам, что вы написали. Поэтому мне нужно использовать stdin, stdout и pipe
stdin - это входной поток, и вам не следует писать в него. "вывод stdin" - это фраза, которую я не понимаю. Что означает «оно» во фразе «он одновременно должен отображать ваш вклад»? Я подозреваю, что вы объединяете stdin, stdout и терминал.