在终端中显示命令结果右对齐

在终端中显示命令结果右对齐

我有一个经过许多不同检查的脚本,我使用中定义的success,函数来清楚地显示终端上的操作结果。failure/etc/init.d/functions

这很好用,除了在某些情况下我打印更多文本,然后显示结果框在我的文字上:

/usr/share/app/lib/lib_mylib.so lib[ OK ]o matches as expected

我希望它显示在哪里:

/usr/share/app/lib/lib_mylib.so lib_mylib.so matches as expected [ OK ]

环顾四周,我发现它/etc/init.d/functions正在使用一个变量RES_COL来定位打印结果字段的位置。如果/etc/sysconfig/init存在则从RES_COL那里获取,默认设置为 60 个字符。

export RES_COL=100找了之后我也尝试过,/etc/init.d/functions没有效果。此外我希望结果字段是右对齐使用终端窗口,而不必为此硬编码任何值。任何想法?

答案1

假设您正确设置了变量,该tput命令可用于控制光标。TERMLINESCOLUMNS变量结合使用,您可以将光标定位在您想要的任何位置。

语法是:

tput cup line column

例如:

tput cup $((LINES-2)) $((COLUMNS-4));echo "[OK]"

答案2

如果您正在使用该文件,人们可能会认为这是启动过程的一部分并且TERM尚未设置环境(使用tput没有实际意义)。为此,它使用硬编码转义序列。

此外,RES_COL除非使用该值,否则设置不会对您的脚本产生太大作用。仅在该文件中使用(Fedora)。

您可以添加自己的函数,将要打印的字符串传递给它,并检查要与 进行比较的长度$RES_COL,如果更长,只需打印该函数(以完成该行),然后在下一行使用$MOVE_TO_COLecho_success在或中打印响应之前移动到响应列的字符串echo_failure

例如,您可能会调用action

action() {
    local STRING rc

    STRING=$1
    echo -n "$STRING "
    shift
    "$@" && success $"$STRING" || failure $"$STRING"
    rc=$?
    echo
    return $rc
}

您可以重定向命令的输出以捕获输出。这会干扰该行,但您可以从 bash 的变量rc=$?中获取它:$PIPESTATUS

    local RESULT
    RESULT=$("$@" 2>&1)
    rc=$PIPESTATUS
    echo -n "$RESULT"
    [ ${#RESULT} -ge $RES_COL ] && echo
    [ $rc = 0 ] success $"$STRING" || failure $"$STRING"

进一步阅读:

相关内容