表示コマンドの結果は、端末の右揃えで表示されます。

表示コマンドの結果は、端末の右揃えで表示されます。

さまざまな検査を受けるスクリプトがあり、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する場合はそこからインポートしてください。デフォルトは60文字です。/etc/sysconfig/initRES_COL

export RES_COL=100私も探してみてみましたが/etc/init.d/functionsダメです。また、結果フィールド右揃えこれに値をハードコードする必要なしにターミナルウィンドウを使用してください。どんなアイデアがありますか?

答え1

変数を正しく設定したと仮定すると、このtputコマンドを使用してカーソルを制御できます。と変数TERMと一緒に使用すると、カーソルを目的の位置に配置できます。LINESCOLUMNS

構文は次のとおりです。

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
}

コマンド出力をリダイレクトして出力をキャプチャできます。これは行を妨げますが、rc=$?bashの変数から取得できます。$PIPESTATUS

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

追加資料:

関連情報