stdout 또는 stderr로(직접 tty로) 전송되지 않은 QNX에서 출력을 캡처하는 방법은 무엇입니까?

stdout 또는 stderr로(직접 tty로) 전송되지 않은 QNX에서 출력을 캡처하는 방법은 무엇입니까?

foogrep 출력, 리디렉션 또는 모든 일반 텍스트 작업을 수행하려는 유틸리티가 있습니다 . 연민! 그것이 무엇을 하는지 보세요...

$ foo
bar
$ foo > /dev/null
bar
$ foo 2> /dev/null
bar
$ foo | grep abc
bar
$ foo 2| grep abc
bar

분명히 출력은 stdout둘 다 아닙니다 stderr. foostdout 대신 tty에 직접 액세스 할 수도 있습니다 . 답이 있다여기이는 script -c. 하지만 아아!

$ script -c foo > /dev/null
script: illegal option -- c
usage: script [-a] [file]

어쩌면 내 script유틸리티가 정식 버전이 아닐 수도 있습니다. 운영 체제는 QNX입니다.

script -c해결 방법에 액세스할 수 없는 경우 출력을 쉽게 캡처하려면 어떻게 해야 합니까? 그것이 타당하다면 tty 파일 자체를 리디렉션하는 방법이 있습니까?

비슷한 일을 하는 것이 가능합니까 foo (/dev/ttyp0)| grep abc? 표시된 대로 정확하게 작동하지 않을 수도 있지만 비슷한 작업을 수행할 수 있는 방법이 있습니까? (가능한 경우) 파일을 먼저 리디렉션하라는 대답이 좋은 것이므로 그런 것도 /dev/ttyp0 please go to /dev/null ; foo괜찮습니다.

궁극적으로 나는 출력을 파일로 파이프 foo하거나 출력을 파일로 리디렉션 할 수 있기 grep를 원합니다.foo

답변1

예, foo애플리케이션이 TTY에 직접 쓸 수 있습니다.

동일한 작업을 수행하는 스크립트는 다음과 같습니다.

#!/bin/sh
echo 'bar' >$(tty)

유틸리티 를 실행에 직접 사용할 script수 없으므로 foo(유틸리티에 의해 시작된 대화형 셸을 통해서만) 명령을 실행하려면 새 TTY를 할당하는 다른 방법을 찾아야 합니다.

한 가지 방법은 다음을 사용하는 것입니다 ssh.

ssh -t localhost "$PWD/foo" >output.log

이는 (ab) ssh에 연결하고 localhost, 할당된 TTY를 강제로 사용하며 -t, foo현재 디렉터리에 있는 애플리케이션을 실행합니다. fooTTY, 표준 출력 및 표준 오류에 기록된 모든 내용을 포함하여 의 출력 은 의 표준 출력에서 ​​반환되며 ssh원하는 곳으로 리디렉션할 수 있습니다.

답변2

알았어, 나는 사용한다스크립트(BSD 상자에)포착장기 실행 작업의 출력 또는 빌드 출력입니다.이것네, 분명 뭔가를 만나게 될 거예요. 예를 들어 매뉴얼 페이지에서 다음과 같습니다.

-a      Append the output to file or typescript, retaining the prior contents.

낯익어 보이나요? :)

이 옵션은 -F pipe가능한 솔루션을 제공할 수 있습니다. 하지만 결국 귀하의 질문에 따르면 잘 모르겠습니다.스크립트실제로 당신이 찾고있는 것입니다.

내가 링크한 매뉴얼 페이지를 확인해 보세요.

화타이

답변3

프로그램이 이 -i옵션을 무시하면 직접 실행할 수 있습니다.

SHELL=/path/to/your/program script /dev/null > output 

이 옵션에 대해 혼란스러우면 -i해당 옵션에 대한 래퍼를 만들 수 있습니다.

$ cat wrapper
#! /bin/sh
exec /path/to/your/program
$ chmod 755 wrapper
$ SHELL=./wrapper script /dev/null > output

관련 정보