터미널 출력을 변환하는 방법은 무엇입니까? [복사]

터미널 출력을 변환하는 방법은 무엇입니까? [복사]

일부 필터를 사용하여 모든 출력을 특정 명령에 의해 생성된 터미널로 변환하고 싶습니다. 이 목표를 어떻게 달성할 수 있나요?

가장 간단한 대답은 아마도 "파이프 사용"일 것입니다. 그러나 이제 구성성을 강조한 원래 Unix 접근 방식에서 벗어나 실행되는 컨텍스트를 살펴보고 터미널로 출력하는지 아니면 다른 것으로 출력하는지에 따라 다르게 동작하는 Unix 도구가 너무 많습니다. 전자의 경우 다음으로 단말기의 기능은 무엇인가? 명령이 해당 기능을 통해 원래 터미널로 출력되는 것처럼 작동하고 추가로 터미널 출력을 변환하기를 원합니다.

답변1

그것은 바로 내가 한 일이다. 필터가 정확히 무엇을 의미하는지 잘 모르겠지만 로그 파일로 작업할 수 있는 방법을 제공합니다 Command 1 output:.echo

#!/bin/bash

set -x

my_command() {
    command1_output=$(command1)
    echo "Command 1 output: $command1_output"

    # Add more commands as needed
}

my_command >> my_logging_file 2>&1

때로는 set -x정보가 너무 많습니다. tail -f my_logging_file다른 터미널에서 실행하여 실시간으로 시청할 수 있습니다.

댓글 업데이트:
tail즉각적인 관찰을 위해 로깅 및 시작, 파이프 연결을 피하세요 .

#!/bin/bash

set -x

my_command() {
    command1_output=$(command1)
    echo "Command 1 output: $command1_output"

    # Add more commands as needed
}

my_command 2>&1 | tail -f /dev/stdin

함수가 my_command실행되고 그 stdout합계가 stderr로 파이프됩니다 tail -f /dev/stdin.


stdout 및 stderr을 기록하는 대신 script전체 세션을 "기록"한 다음 다시 "재생"하는 것이 목적입니다. 당신은 그것을 사용할 수 있습니다 :

script my_session.log
# Your commands here
exit 0

그런 다음 세션을 보는 데 사용하십시오 scriptreplay my_session.log.


expect명령은 대화형 프로그램을 자동화하는 데 사용되는 스크립트 언어입니다. (즉, 사용자 입력이 필요한 명령입니다.)
예를 들면 다음과 같습니다.

#!/usr/bin/expect

spawn my_command
expect "Input:"  # Replace with expected prompt
send "input_value\r"
expect eof

이는 특정 프롬프트를 기다린 다음 선택한 입력을 전송하여 my_command와 자동으로 상호 작용합니다.

관련 정보