Acabei de notar que parece que a bandeira -e
não existe para o echo
comando no meu shell no Linux. É apenas uma configuração confusa ou é "normal"?
Algum código como exemplo:
#!/bin/sh
echo -e "\e[3;12r\e[3H"
Impressões:
-e \e[3;12r\e[3H
Isso funcionou antes! Eu acho que alguns stty
comandos deram muito errado e agora não funciona mais. Alguém sugeriu que o meu sh
era realmente justo bash
.
shell
escape-characters
echo
BrainStone
fonte
fonte
echo
built-in do/bin/sh
shell, conforme fornecido pelodash
pacote no Debian (um sistema operacional que pode ter Linux ou FreeBSD como seu kernel).Respostas:
Como você usou
sh
, nãobash
, oecho
comando insh
não tem opção-e
. Da página desh
manual:E também não tem
\e
:fonte
sh
implementações suportamecho -e
, no momento da compilação,bash
pode ser dito para não suportarecho -e
. É que esse sh em particular (provavelmentedash
) não suporta-e
enquanto esse em particular obash
suporta.-e
não é POSIX (de fato, o POSIX echo geralmente não aceita opções (embora seja permitido o suporte-n
), veja aqui ), e/bin/sh
no seu sistema parece ser um shell POSIX.-e
é uma extensão aceita em algumas conchas, mas você não deve confiar nela, não é portátil. Idealmente, useprintf
ou mude para o uso de um shell que possuiecho -e
.Veja também as advertências
\e
nos comentários abaixo, que devem ser substituídas por\033
.fonte
sh
também não reconhece\e
. Use\033
Observe que a qualquer momento e em quase qualquer shell, você pode descobrir qual "eco" será chamado digitando
type echo
ouwhich echo
. Geralmente é um shell embutido. Portanto, depende de qual "eco" está instalado e de qual shell você está usando.fonte
which echo
não deve ser usado, provavelmente não informará se você está usando um built-in, porquewhich
geralmente é um binário externo.type
é bom, no entanto.type which
ouwhich which
). ;)