URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 1785
[ Назад ]

Исходное сообщение
"Как загнать вывод в файл"

Отправлено krupskij , 20-Июн-03 18:14 
Как загнать вывод программы, которая постоянно гонит вывод на
консоль, в файл. Просто $>progname > exec_log не выходит - получаю
весь вывод на консоли плюс файл exec_log длиной 0. Мне надо заставить
программу сливать в лог весь вывод - ошибки, что она там выдает в процессе
выполнения.

И еще - как в шелловом скрипте проверить наличие нескольких файлов???


Содержание

Сообщения в этом обсуждении
"Как загнать вывод в файл"
Отправлено LS , 20-Июн-03 18:53 
>Как загнать вывод программы, которая постоянно гонит вывод на
>консоль, в файл. Просто $>progname > exec_log не выходит - получаю
>весь вывод на консоли плюс файл exec_log длиной 0. Мне надо заставить
>

что просил, то и получил.

$>progname >> exec_log 2>&1

>программу сливать в лог весь вывод - ошибки, что она там выдает
>в процессе
>выполнения.
>
>И еще - как в шелловом скрипте проверить наличие нескольких файлов???

для bash

CONDITIONAL EXPRESSIONS
       Conditional expressions are used by the [[  compound  command  and  the
       test  and [ builtin commands to test file attributes and perform string
       and arithmetic comparisons.  Expressions are formed from the  following
       unary  or  binary  primaries.   If any file argument to one of the pri-
       maries is of the form /dev/fd/n, then file descriptor n is checked.  If
       the  file  argument  to  one  of  the  primaries  is one of /dev/stdin,
       /dev/stdout, or /dev/stderr, file descriptor 0, 1, or 2,  respectively,
       is checked.

       -a file
              True if file exists.
       -b file
              True if file exists and is a block special file.
       -c file
              True if file exists and is a character special file.
       -d file
              True if file exists and is a directory.
       -e file
              True if file exists.
       -f file
              True if file exists and is a regular file.
       -g file
              True if file exists and is set-group-id.
       -h file
              True if file exists and is a symbolic link.
       -k file
              True if file exists and its ``sticky'' bit is set.
       -p file
              True if file exists and is a named pipe (FIFO).
       -r file
              True if file exists and is readable.
       -s file
              True if file exists and has a size greater than zero.
       -t fd  True if file descriptor fd is open and refers to a terminal.
       -u file
              True if file exists and its set-user-id bit is set.
       -w file
              True if file exists and is writable.
       -x file True if file exists and is executable.
       -O file
              True if file exists and is owned by the effective user id.
       -G file
              True if file exists and is owned by the effective group id.
       -L file
              True if file exists and is a symbolic link.
       -S file
              True if file exists and is a socket.
       -N file
              True  if  file  exists  and  has been modified since it was last
              read.
       file1 -nt file2
              True if file1 is newer (according  to  modification  date)  than
              file2, or if file1 exists and file2 does not.
       file1 -ot file2
              True  if file1 is older than file2, or if file2 exists and file1
              does not.
       file1 -ef file2
              True if file1 and file2 refer to the same device and inode  num-
              bers.


"Как загнать вывод в файл"
Отправлено krupskij , 20-Июн-03 19:27 
>>Как загнать вывод программы, которая постоянно гонит вывод на
>>консоль, в файл. Просто $>progname > exec_log не выходит - получаю
>>весь вывод на консоли плюс файл exec_log длиной 0. Мне надо заставить
>что просил, то и получил.
>$>progname >> exec_log 2>&1

Угу. А где найти теоретическое обьяснение по этому поводу ???


"Как загнать вывод в файл"
Отправлено LS , 20-Июн-03 19:39 
>>>Как загнать вывод программы, которая постоянно гонит вывод на
>>>консоль, в файл. Просто $>progname > exec_log не выходит - получаю
>>>весь вывод на консоли плюс файл exec_log длиной 0. Мне надо заставить
>>что просил, то и получил.
>>$>progname >> exec_log 2>&1
>
>Угу. А где найти теоретическое обьяснение по этому поводу ???

"progname> exec_log" - перенаправляет стандартный поток вывода команды (то что у тебя обычно попадает на консоль) в файл exec_log. если такого файла нет, то он создается

"progname>> exec_log" - выполняет аналогичное действие, но если файл существует, то информация дописывается в его конец

"2>&1" - перенаправляет стандартный поток ошибок (2) в стандартный поток вывода (1). а поскольку к этому моменту стандартный вывод у тебя уже перенаправлен в файл, то все сообщения об ошибках посыпятся туда же (иначе бы вылезли на консоль). 1 подразумевается по умолчанию, поэтому "progname>> exec_log" эквивалентно "progname 1>> exec_log"

ищи информацию по операциям перенаправления ввода/вывода


"Как загнать вывод в файл"
Отправлено LS , 20-Июн-03 19:42 
>
>ищи информацию по операциям перенаправления ввода/вывода

обычно все это есть в man по командной оболочке, которой ты пользуешься


"Как загнать вывод в файл"
Отправлено Andrey , 24-Июн-03 14:21 
>>
>>ищи информацию по операциям перенаправления ввода/вывода
>
>обычно все это есть в man по командной оболочке, которой ты пользуешься
>

попробуй еще так:
#progname | cat > logfile


"Как загнать вывод в файл"
Отправлено LS , 24-Июн-03 21:41 
>>>
>>>ищи информацию по операциям перенаправления ввода/вывода
>>
>>обычно все это есть в man по командной оболочке, которой ты пользуешься
>>
>
>попробуй еще так:
>#progname | cat > logfile


[syslha@localhost syslha]$ cd ~/temp
[syslha@localhost temp]$ echo "test">111
[syslha@localhost temp]$ cat ./111
test
[syslha@localhost temp]$ cat ./111|cat > ./result
[syslha@localhost temp]$ cat ./result
test
[syslha@localhost temp]$ cat ./xxx|cat > ./result
cat: ./xxx: No such file or directory
[syslha@localhost temp]$ cat ./result
[syslha@localhost temp]$

Вам тот же диагноз - man по шелу