是否可以在bash中自动截断长输出?
理想情况下,我想定义一个限制(例如MAXLINES),并将tail -n $MAXLINES
自动应用于向终端输出多于MAXLINES行的每个命令(但显然在其他情况下(例如,管道)则不行)。
答案 0 :(得分:2)
可以使用PROMPT_COMMAND
MAXLINES=10
tmp_out=/tmp/$$.output
PROMPT_COMMAND='touch "$tmp_out"; tail -n "$MAXLINES" "$tmp_out" >/dev/stdin; exec >"$tmp_out"'
工作原理
tmp_out=/tmp/$$.output
临时文件,用于存储命令的输出touch "$tmp_out"
:如果不存在则创建一个空文件,以使tail命令在第一次调用时不会失败tail -n "$MAXLINE" "$tmp" > /dev/stdin
:显示输出的前最大线数exec > "$tmp_out"
:清除临时文件,并将当前进程输出(文件描述符1)重定向到该文件,以防stderr也可以重定向到另一个要被截断的文件(例如2> "$tmp_err"
)。 / li>
要运行命令而无需重定向
exec >/dev/stdin; ... the command
或({
之后的空格很重要)
{ the command;}>/dev/stdin
要检索初始设置
unset PROMPT_COMMAND; exec >/dev/stdin