谢谢!我的用户案例:我开始了一个冗长的交互式"配置"过程(比如在'屏幕'下),然后意识到我需要总是回答'不',直到我看到一个特定的关键字.手动执行此操作似乎浪费时间(并不是说我很容易错过关键字..)
因此,似乎我想将STDERR/STDOUT管道(副本)传递给过滤器,并且能够使用命令行注入(控制台)进程的STDIN,在它启动之后?有现成的解决方案吗?
以下工具似乎有所帮助.要捕获输出,请使用
strace -ewrite -p $PID
Run Code Online (Sandbox Code Playgroud)
这不是那么干净(显示如下行:写(#,)),但有效!但它是否说正确处理UTF8?
要重定向输出,请执行类似的操作
printf '..input..' >/dev/pts/33
Run Code Online (Sandbox Code Playgroud)
但目前尚不清楚如何找到合适的设备..
在grepping管道输出时,如何使grep尊重ANSI颜色转义?我很乐意使用别的东西(perl?)而不是grep.
我的用户名:我想要
gcc foobar.c | colorgcc | grep regexp
ls --color | grep filename
Run Code Online (Sandbox Code Playgroud)
与颜色很好地配合使用(在使用ANSI转义的unix终端上).
我想要的行为测试示例:
echo -e "he\e[35mllo\e[00m" world |grep hell ==> he\e[35mllo\e[00m world
echo -e "\e[35m removed line\nhello\e[00m" world |grep hell ==> \e[35mhello\e[00m world
echo -e "\e[35m rem\e[1moved line\nhello\e[00m" world | grep hell ==> \e35m\e1mhello\e[00m world
Run Code Online (Sandbox Code Playgroud)
目前第一行给出空字符串,第二行给出未着色字符串'hello\e [00m world'.这里\ [35m和\ e00m是颜色(属性)修饰符:字母的颜色由形式\ e [P1;的最后几个颜色(属性)转义序列决定.P2; ..其中P1,P2等是数字序列;\e [P1m\e [P2m相当于\ e [P1; P2m.\ e [0m使颜色默认并忘记所有先前的\ e [... m序列:\ e [34m\e [0m相当于\ e [0m.有几个独立的属性(粗体,背景的颜色,前景/字母的颜色); 转义序列中的每个数字只影响其中一个.因此\ e [1m\e [35m相当于\ e [1; 35m但不是\ [35; 1m也不是\ …
我想监视和记录伪终端设备 /dev/pts/12 (用于调试目的),即我想查看写入终端的内容,并且我不希望任何使用终端的进程注意到。
显而易见的解决方案
cat /dev/pts/1
cat </dev/pts/1
Run Code Online (Sandbox Code Playgroud)
不起作用:充其量,它似乎只捕获击键。
换句话说,我想要类似 script -t file.timings typescript 的输出;但我还需要击键。Reptyr -l $PID 是另一个可能有帮助的程序:它将进程 $PID 的输出重定向到另一个 /dev/pts 或管道。