5

bash で書いたばかりの行をバックスペースして、その場所に新しい行を配置するにはどうすればよいでしょうか? 私はそれが可能であることを知っています.Aptitude(apt-get)はそれをいくつかの更新に使用しています.

4

3 に答える 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 に答える