Borre toda la consola EXCEPTO la línea actual con el comando "borrar"

Borre toda la consola EXCEPTO la línea actual con el comando "borrar"

La necesidad de borrar la terminal pero guardar la línea actual con el comando. ¡En el guión! (El comando llama al script. Es necesario borrar todo el terminal ANTES de este comando, que llama al script). Restaurar un comando del historial no es adecuado

Ejemplo de uso esperado:

  1. Se está creando un script "test.sh"
  2. Escribimos algún comando "borrar" modificado en él:
    #!/usr/bin/env bash
    clear
    echo some text
    
  3. Aplicar

Estado terminal actual:

ingrese la descripción de la imagen aquí

Resultado actual después de ejecutar 'test.sh':

ingrese la descripción de la imagen aquí

¿Cuál es el problema? El hecho de que la línea con el comando haya desaparecido + vscode no muestra la marca de verificación izquierda con el código de error del script.

Resultado Esperado:

ingrese la descripción de la imagen aquí

¿Cómo hacerlo?

PD:

El problema no solo está en vscode, en otras terminales el comando también se borra por completo

ingrese la descripción de la imagen aquí

Respuesta1

De una sola mano

Si necesita un mensaje real, puede utilizar alguna manipulación del cursor como esta:

#!/bin/bash

# Save cursor position
printf '\033[s'
# Move the cursor up 1 line
printf '\033[1A'
# Clear the screen
printf '\033[1J'
# Restore cursor position
printf '\033[u'


echo "new thing"

Si el ejemplo anterior necesita más ajustes, consulte, por ejemploSecuencias de escape ANSI: movimiento del cursory tambiénSecuencias de escape ANSIpara más de esos.

De otra manera

Aún puedes usarlo clearsi lo deseas y luego volver a dibujar el mensaje de esta manera:

#!/bin/bash

# Clear the screen
clear
# Build the prompt as it was before "clear"
line="$(printf '%s' "$USER@$HOSTNAME:$PWD$ $0")"
# For "root" prompt i.e. "#", comment out the above line and uncomment the below line
# line="$(printf '%s' "$USER@$HOSTNAME:$PWD# $0")"
# Print the prompt
echo "${line/\/home\/$USER/\~}"


echo "new thing"

O incluso así:

#!/bin/bash    

clear
line="$USER@$HOSTNAME:$PWD$ "
read -t 0.01 -ei "$(echo "$0")" -p "${line/\/home\/$USER/\~}"
echo


echo "new thing"

Las apariencias engañan, pero las apariencias pueden ser lo que quieres... Sin embargo, no es un mensaje real.

Respuesta2

Tu pregunta no es muyclear (que irónicamente es el comando que quieres usar), pero intentaré responderla de todos modos.

Tengo entendido que se llama a un script con un comando (digamos que se llama./myscript ) y desea borrar la pantalla antes de ejecutar el script.

Puedes hacer esto de 2 maneras.

  1. Borre la pantalla y luego ejecute el script:

    $ clear; ./myscript
    
  2. Tenga el clearcomando como primera línea en su script:

     #!/bin/bash
     # Beginning of ./myscript
     clear
    
     # The rest of the script goes here
    

    Y luego simplemente ejecute el script, que borrará la pantalla, y luego procederá a hacer otras cosas:

     $ ./myscript
    

Finalmente, si desea crear un alias que borre la pantalla y luego vuelva a ejecutar el último comando, puede definir:

alias clrun='clear; $(fc -ln -1)'

Luego corriendoclrun hará exactamente esto: borrar la pantalla y luego volver a ejecutar el comando anterior.

Si esto no responde a tu pregunta, debes ser mucho más preciso en lo que quieres.

información relacionada