2개의 명령을 실행하고, 파일에 추가하고 콘솔에 명령 출력을 표시하지만 명령은 하나만

2개의 명령을 실행하고, 파일에 추가하고 콘솔에 명령 출력을 표시하지만 명령은 하나만

nmap과 같은 Linux 명령을 실행하고 입력을 txt2html 명령에 전달하여 파일에 추가하려고 하지만 nmap 명령의 출력만 표시합니다. 제공된 명령은 작동하지만 txt2html 출력을 출력하므로 터미널에 nmap 출력을 표시하고 싶습니다. 이를 수행할 수 있는 방법이 있습니까?

nmap localhost | txt2html -extract -8 | tee -a file_to_append

답변1

나는 이것이 당신이 원하는 것이라고 믿습니다.

nmap localhost | tee /dev/stderr | txt2html -extract -8 >> file_to_append

설명하다:

  1. nmap을 실행합니다.
  2. nmap의 출력은 /dev/stderr 파일(표준 오류임)과 stdout 모두로 전송됩니다.
  3. txt2html은 이전 단계에서 stdout을 읽고 그 출력을 file_to_append에 추가합니다. 이제 stderror는 리디렉션되지 않으므로 콘솔에 나타나야 볼 수 있습니다.

다음은 일부 더미 명령이 포함된 출력이 없는 예입니다.

$ echo hi | tee /dev/stderr | sed "s/hi/bye/" > /tmp/test.txt
hi
$ cat /tmp/test.txt
bye

터미널 출력이 저장된 내용과 다른 것을 확인할 수 있습니다.

답변2

사용 중인 셸이 를 사용한 프로세스 대체를 지원한다고 가정하면 다음 명령 에 대한 리디렉션을 >(...)사용할 수 있습니다 .teetxt2html

nmap localhost | tee >(txt2html -extract -8 >>some-file)

여기에서는 txt2html에서 입력을 가져 tee와서 에 출력을 추가합니다 some-file.

txt2html를 쓰는 것 외에도 tee터미널에 연결될 수 있는 표준 출력 스트림에 원시 입력을 씁니다.

이 경우 모든 진단 출력은 nmap바이패스되어 tee터미널 txt2html로 직접 전송됩니다. 이를 처리하려면 2>&1표준 오류 스트림이 표준 출력 스트림과 함께 리디렉션되도록 파이프 왼쪽에서 명령 출력을 리디렉션하세요.

관련 정보