foo
grep 출력, 리디렉션 또는 모든 일반 텍스트 작업을 수행하려는 유틸리티가 있습니다 . 연민! 그것이 무엇을 하는지 보세요...
$ foo
bar
$ foo > /dev/null
bar
$ foo 2> /dev/null
bar
$ foo | grep abc
bar
$ foo 2| grep abc
bar
분명히 출력은 stdout
둘 다 아닙니다 stderr
. foo
stdout 대신 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
현재 디렉터리에 있는 애플리케이션을 실행합니다. foo
TTY, 표준 출력 및 표준 오류에 기록된 모든 내용을 포함하여 의 출력 은 의 표준 출력에서 반환되며 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