2013-04-10 3 views
3

Новое для программирования bash. Я не уверен, что подразумевается под «output to stdout». Это означает распечатку в командной строке?Что означает «output to stdout»

Если у меня есть простой Баш скрипт:

#!/bin/bash 
wget -q http://192.168.0.1/test -O - | grep -m 1 'Hello' 

выводит строку в терминал. Означает ли это, что это «вывод на стандартный вывод»?

Благодаря

ответ

2

Каждый процесс в системе Linux (и большинство других) имеет, по меньшей мере, 3 открытых дескрипторов файлов:

  • STDIN (0)
  • стандартный вывод (1)
  • STDERR (2)

Regualary каждый из этих файловых дескрипторов будет указывать на т он терминал, с которого начался процесс. Как это:

cat file.txt # all file descriptors are pointing to the terminal where you type the  command 

Однако Баш позволяет изменить это поведение с помощью input/output redirection:

cat < file.txt # will use file.txt as stdin 

cat file.txt > output.txt # redirects stdout to a file (will not appear on terminal anymore) 

cat file.txt 2> /dev/null # redirects stderr to /dev/null (will not appear on terminal anymore 

То же самое происходит, когда вы используете символ трубы, как:

wget -q http://192.168.0.1/test -O - | grep -m 1 'Hello' 

Что такое на самом деле происходит то, что stdout процесса wget (процесс до |) перенаправляется на stdin процесса grep. Таким образом, stdout wget больше не является терминалом, а выход grep - текущим терминалом. Если вы хотите перенаправить вывод grep в файл, например, используйте следующее:

wget -q http://192.168.0.1/test -O - | grep -m 1 'Hello' > output.txt 
+0

Итак, в моем конкретном примере вывод направляется на терминал, который в этом случае является стандартным? – 0xSina

+0

Немного обновили. Надеюсь, это упростит ситуацию. – hek2mgl

3

Да, стандартный вывод является терминал (если это не перенаправляется в файл с помощью оператора > или в стандартный ввод другого процесса с использованием |)

В вашем конкретном примере, вы на самом деле перенаправляя используя | grep ... через grep, затем на терминал.