bash で書いたばかりの行をバックスペースして、その場所に新しい行を配置するにはどうすればよいでしょうか? 私はそれが可能であることを知っています.Aptitude(apt-get)はそれをいくつかの更新に使用しています.
6934 次
3 に答える
13
これを試して:
$ printf "12345678\rABC\n"
ABC45678
ご覧のとおり、キャリッジ リターンを出力すると、カーソルが同じ行の先頭に移動します。
次のように行をクリアできます。
$ printf "12345678\r$(tput el)ABC\n"
ABC
を使用tput
すると、制御文字を端末に送信する移植可能な方法が得られます。man 5 terminfo
制御コードのリストについては、を参照してください。通常、外部ユーティリティを繰り返し呼び出す必要がないように、シーケンスを変数に保存します。
$ clear_eol=$(tput el)
$ printf "12345678\r${clear_eol}ABC\n"
ABC
于 2011-01-10T07:14:43.123 に答える
1
次の例では、find コマンドと while-read ループを使用して、標準出力への完全なファイル パスを 1 行だけで継続的に出力しています。
command find -x / -type f -print0 2>/dev/null | while read -d $'\0' filename; do
let i+=1
filename="${filename//[[:cntrl:]]/}" # remove control characters such as \n, \r, ...
if [[ ${#filename} -lt 85 ]]; then
printf "\r\e[0K\e[1;32m%s\e[0m %s" "${i}" "${filename}"
else
printf "\r\e[0K\e[1;32m%s\e[0m %s" "${i}" "${filename:0:40}.....${filename: -40}"
fi
done; echo
于 2011-01-10T10:05:04.190 に答える
1
あなたが何を望んでいるのかは私にははっきりしていませんが、端末の設定によっては、画面に ^H (コントロール H) を出力すると、カーソルが 1 つ上の位置に戻ります。
また、一部の端末にはカーソルを行の先頭に移動する機能があることに注意してください。その場合、行の先頭に移動し、行全体を上書きするのに十分なスペースを出力し (通常は $COLUMNS から利用可能)、次にメッセージなどを印刷します。
あなたが望むものを正確に明確にし、私があなたに答えることができれば、私の答えを更新します.
于 2011-01-10T06:52:10.707 に答える