如何转换终端输出?

如何转换终端输出?

我想使用一些过滤程序将所有输出转换到某个命令生成的终端。我怎样才能实现这个目标?

最直接的答案可能是“使用管道”。然而,现在有太多的 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被执行,并且它的stdoutstderr被通过管道传送到tail -f /dev/stdin


script记录 stdout 和 stderr 不同,它的目的是“记录”整个会话,然后“播放”回来。您可以使用:

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 进行交互。

相关内容