さまざまな検査を受けるスクリプトがあり、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/init
RES_COL
export RES_COL=100
私も探してみてみましたが/etc/init.d/functions
ダメです。また、結果フィールド右揃えこれに値をハードコードする必要なしにターミナルウィンドウを使用してください。どんなアイデアがありますか?
答え1
変数を正しく設定したと仮定すると、このtput
コマンドを使用してカーソルを制御できます。と変数TERM
と一緒に使用すると、カーソルを目的の位置に配置できます。LINES
COLUMNS
構文は次のとおりです。
tput cup line column
たとえば、
tput cup $((LINES-2)) $((COLUMNS-4));echo "[OK]"
答え2
このファイルを使用している場合は、これが起動プロセスの一部であり、TERM
環境が設定されていないと想定できます。tput
実質的な意味はありません。)これには、ハードコーディングされたエスケープシーケンスを使用します。
また、RES_COL
値を使用しない限り、設定はスクリプトに大きな影響を与えません。このファイル(Fedora)でのみ使用されます。
独自の関数を追加し、印刷したい文字列を渡して比較する長さを確認した後$RES_COL
、長さが長い場合は関数を印刷して(行を完成させるため)、次の行で使用できます。$MOVE_TO_COL
echo_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"
追加資料: