일부 필터를 사용하여 모든 출력을 특정 명령에 의해 생성된 터미널로 변환하고 싶습니다. 이 목표를 어떻게 달성할 수 있나요?
가장 간단한 대답은 아마도 "파이프 사용"일 것입니다. 그러나 이제 구성성을 강조한 원래 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와 자동으로 상호 작용합니다.