Bash 在显示之前测试文件的有效(分页)行
Bash test effective (paginated) lines of file before displaying
我刚刚创建了一个脚本来显示文件的内容,根据有效(post-line-wrap)数的数量使用cat
或less
文件中的行数。需要说明的是,我的东西很好用,我只是想知道是否有人手头有更好的东西。
if [ $(stat -c '%s' "${ERRLOG}") -gt 0 ]; then
echo "${ERRLOG}"
if [ -n "${COLUMNS}" -a "$(grep -o ".{0, ${COLUMNS}}" "${ERRLOG}" | wc -l)" -gt "${ROWS}" ]; then
less "${ERRLOG}"
else
cat "${ERRLOG}"
fi
fi
虽然我为使用 grep -o
感到自豪,它将同一源代码行中的多个模式匹配拆分为多行,但我怀疑有更好的方法可以做到这一点,最好是不解析的方法文件内容两次。也许与 awk 相关?
感谢 this post 使用 $ROWS
和 $COLUMNS
less
具有内置功能:
-F
or --quit-if-one-screen
Causes less
to automatically exit if the entire file can be displayed on the first screen.
您总是想使用的选项可以在 $LESS
环境变量中设置。
对于530之前的less
版本,必须额外使用-X
/--no-init
选项;请参阅 release notes for less
530:
Don't output terminal init sequence if using -F
and file fits on one screen.
我刚刚创建了一个脚本来显示文件的内容,根据有效(post-line-wrap)数的数量使用cat
或less
文件中的行数。需要说明的是,我的东西很好用,我只是想知道是否有人手头有更好的东西。
if [ $(stat -c '%s' "${ERRLOG}") -gt 0 ]; then
echo "${ERRLOG}"
if [ -n "${COLUMNS}" -a "$(grep -o ".{0, ${COLUMNS}}" "${ERRLOG}" | wc -l)" -gt "${ROWS}" ]; then
less "${ERRLOG}"
else
cat "${ERRLOG}"
fi
fi
虽然我为使用 grep -o
感到自豪,它将同一源代码行中的多个模式匹配拆分为多行,但我怀疑有更好的方法可以做到这一点,最好是不解析的方法文件内容两次。也许与 awk 相关?
感谢 this post 使用 $ROWS
和 $COLUMNS
less
具有内置功能:
-F
or--quit-if-one-screen
Causesless
to automatically exit if the entire file can be displayed on the first screen.
您总是想使用的选项可以在 $LESS
环境变量中设置。
对于530之前的less
版本,必须额外使用-X
/--no-init
选项;请参阅 release notes for less
530:
Don't output terminal init sequence if using
-F
and file fits on one screen.