Bash: 표준 출력을 콘솔로 보내고 다음 명령으로 파이프하는 방법은 무엇입니까?

Bash: 표준 출력을 콘솔로 보내고 다음 명령으로 파이프하는 방법은 무엇입니까?

표준 출력을 콘솔로 보내고 동시에 다음 명령으로 파이프하려면 어떻게 해야 합니까?

로그 파일의 끝 부분에서 출력을 변수로 가져온 다음 로그나 이메일로 grep할 수 있는 여기에 제안된 Read 명령을 사용해 보았지만 여전히 stdout 콘솔에도 출력을 가져오고 싶습니다. https://unix.stackexchange.com/a/365222/346155

나는 다음과 같이 Tee를 사용해 보았습니다. https://unix.stackexchange.com/a/47936/346155

다음과 같은 경우에 --line-buffered 플래그를 사용합니다. https://stackoverflow.com/a/7162898/4240654

sdtin 논리에 대한 간단한 내용이 누락되었을 수 있지만 첫 번째 링크의 경우 Bash에 그러한 간단한 기능이 없을 수 있음을 시사합니다. 그리고 변수는 서브쉘에서 읽을 수 없습니다.

그것이 작동한다는 사실은 echo 'hello' | echo $(</dev/stdin)그것이 가능하다는 것을 보여줍니다. 이를 살펴보는 또 다른 방법은 각 파이프 세그먼트 내의 콘솔에 표준 출력을 수행하는 방법입니다. 이는 bash 스크립트에 제출하기 전에 긴 명령 목록을 디버깅하는 데 도움이 됩니다.

편집: echo 'hello' | echo $(</dev/stdin) >/dev/stoutor 와 같은 것 echo 'hello' | tee >/dev/stdout | echo 2nd $(</dev/stdin), 후자는 'hello'를 두 번 인쇄해야 하지만 한 번만 인쇄해야 합니다.

답변1

사용 tee /dev/tty. 예:

echo "Hello word" | tee /dev/tty | wc -c

tee그리고/dev/ttyPOSIX에 필요합니다.


/dev/tty2일반적으로 말하면 또는 같은 이름을 사용할 수 있습니다 /dev/pts/7. 쓸 수 있는 한 현재 터미널일 필요는 없습니다.

이를 살펴보는 또 다른 방법은 각 파이프 세그먼트 내의 콘솔에 표준 출력을 수행하는 방법입니다. 이는 bash 스크립트에 제출하기 전에 긴 명령 목록을 디버깅하는 데 도움이 됩니다.

나는 tmux창을 사용하여 비슷한 작업을 편리하게 수행했습니다. 를 사용하거나 사용하지 않고 이 작업을 수행할 수 있습니다 tmux.

  1. 원하는 경우 필요한 만큼 창을 준비하거나 콘솔 창을 준비하세요.
  2. 통화할 때마다 tty터미널의 파일 이름을 알아보세요 .
  3. 그 중 하나는 디버깅하려는 파이프라인을 호출 tee하고 각 단계마다 다른 터미널을 사용합니다. 이 파이프라인

    command1 | command2 | command3
    

    다음과 같이 변할 것이다

    command1 | tee /dev/pts/4 | command2 | tee /dev/pts/5 | command3
    

    여기서 /dev/pts/4/dev/pts/5는 추가 터미널입니다(예: 의 창 tmux).

답변2

... | tee log-file-name

그러면 첫 번째 명령의 표준 출력이 로그 파일과 표준 출력에 복사됩니다.

관련 정보