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:
- Um script está sendo criado "test.sh"
- Escrevemos nele algum comando "clear" modificado:
#!/usr/bin/env bash clear echo some text
- Aplicar
Estado terminal atual:
Resultado atual após a execução de 'test.sh':
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:
Como fazer isso?
PS:
O problema não está só no vscode, em outros terminais o comando também é completamente apagado
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 clear
se 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.
Limpe a tela e execute o script:
$ clear; ./myscript
Tenha o
clear
comando 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 clrun
fará 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.