我想使用一些过滤程序将所有输出转换到某个命令生成的终端。我怎样才能实现这个目标?
最直接的答案可能是“使用管道”。然而,现在有太多的 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
。
与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 进行交互。