Limpe todo o console, EXCETO a linha atual com o comando "clear"

Limpe todo o console, EXCETO a linha atual com o comando "clear"

A necessidade de limpar o terminal, mas salvar a linha atual com o comando. No roteiro! (O script é chamado pelo comando. É necessário limpar todo o terminal ANTES deste comando, que chama o script.) Restaurar um comando do histórico não é adequado

Exemplo de uso esperado:

  1. Um script está sendo criado "test.sh"
  2. Escrevemos nele algum comando "clear" modificado:
    #!/usr/bin/env bash
    clear
    echo some text
    
  3. Aplicar

Estado terminal atual:

insira a descrição da imagem aqui

Resultado atual após a execução de 'test.sh':

insira a descrição da imagem aqui

Qual é o problema? O fato de a linha com o comando + vscode ter desaparecido não exibe a marca de seleção esquerda com o código de erro do script.

Resultado esperado:

insira a descrição da imagem aqui

Como fazer isso?

PS:

O problema não está só no vscode, em outros terminais o comando também é completamente apagado

insira a descrição da imagem aqui

Responder1

Mão Única

Se precisar de um prompt real, você pode usar alguma manipulação do 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"

Se o exemplo acima precisar de mais ajustes, veja por exemploSequências de escape ANSI: Movimento do Cursore tambémSequências de escape ANSIpara mais desses.

Outra maneira

Você ainda pode usar clearse quiser e depois redesenhar seu prompt assim:

#!/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"

Ou mesmo assim:

#!/bin/bash    

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


echo "new thing"

As aparências enganam, mas as aparências podem ser o que você deseja... Porém, não é um aviso real.

Responder2

Sua pergunta não é muito boa clear(que ironicamente é o comando que você deseja usar), mas tentarei responder mesmo assim.

Entendo que você chama um script com um comando (digamos que se chama ./myscript) e deseja limpar a tela antes que o script seja executado.

Você pode fazer isso de duas maneiras.

  1. Limpe a tela e execute o script:

    $ clear; ./myscript
    
  2. Tenha o clearcomando como primeira linha do seu script:

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

    E então é só executar o script, que irá limpar a tela, e então proceder para fazer outras coisas:

     $ ./myscript
    

Finalmente, se você deseja criar um alias que limpe a tela e execute novamente o último comando, você pode definir:

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

Em seguida, a execução clrunfará exatamente isso: limpe a tela e execute novamente o comando anterior.

Se isso não responder à sua pergunta, você terá que ser muito mais preciso no que deseja.

informação relacionada