tcsh - código de escape echo para escape

0

Eu estou tentando criar programaticamente um arquivo imprimindo diferentes coisas para ele. (por exemplo, printf %s\n hostname >> file.txt )

Eu gostaria de enviar um código Esc para limpar a tela (seria a primeira linha).

No bash, eu uso apenas printf $'3[2J'$'3[;H' ( 3 sendo o octeto para Esc ) e limpa a tela. Tudo funciona como deveria; como a primeira linha no arquivo, quando você cat o arquivo, ele limpa a tela primeiro.

No tcsh (o shell padrão para a raiz do FreeBSD), não consigo descobrir como "escapar da fuga" e obter o equivalente dos códigos de escape bash.

Eu tenho experimentado com ( printf e echo )

  • echo% {\ e [2J]}
  • echo \ e
  • echo \\ e
  • echo% {\ 033 [2J}

Se alguém puder me apontar na direção certa, eu ficaria muito grato!

Obrigado!

    
por Allan 14.03.2017 / 18:09

1 resposta

4

printf expande os argumentos do formato (primeiro) por si só, não há necessidade dessas ksh93 -style $'...' quotes. Então:

printf '[2J[H'

Observe que printf não é interno em tcsh , portanto, você estaria chamando o comando printf no sistema de arquivos. Você também pode chamar os comandos tput ou clear , mas em tcsh que não é necessário, pois tcsh tem suporte interno para termcap / terminfo, portanto, você pode fazer:

echotc clear

Isso consultará o banco de dados terminfo ou termcap para a seqüência de escape correta a ser enviada para o terminal atual (de acordo com $TERM ), que geralmente é melhor do que usar um código embutido.

Se você quisesse usar tcsh echo integrado, poderia fazer:

set echo_style = both # meant to be the default in tcsh
echo -n '3[2J3[H'

Ou:

set echo_style = sysv # or both
echo '3[2J3[H\c'
    
por 14.03.2017 / 18:32