Está produzindo informações como esta:
que eu gostaria de limpar para obter algo assim:
— pijaaa
Use printfpara formatar a saída (também é mais portátil queecho ). Também armazenaria o valor real das seqüências de escape de cores em vez de armazená-las de uma forma que exija expansão por echo.
%-15sé uma especificação de formato que as almofadas das cordas com espaços sobre a direita de modo como o comprimento (em número de caracteres em zshe fishe bytes de mais outros escudos / printf ) para ser, pelo menos, 15.
Outros utilitários para formatar texto em colunas incluem POSIXexpand :
(aqui expandindo o caractere TAB ( \t) com tab stops a cada 30 colunas)
Ou BSDcolumn ou POSIXpr :
(aqui exibindo 2 colunas de 36 colunas de largura (consulte a -wopção para alterar a largura da página do padrão de 72)).
ou BSDrs :
(o tipo columnnão começará a produzir até que tenha lido toda a entrada).
Ou GNUcolumns :
zshtambém possui alguns sinalizadores de expansão de parâmetro para preenchimento de cadeia de caracteres: ${(l:15:)hostname}para preenchimento esquerdo e ${(r:15:)hostname}para preenchimento direito (com truncamento). Na expansão rápida (como em prompts ou dentro print -Pou conforme habilitado nas expansões de parâmetro com o %sinalizador), ele também suporta %F{green}a saída em cores, para que você possa:
Embora o conteúdo de $hostnametambém esteja sujeito a expansão imediata, o que constituiria uma vulnerabilidade de injeção de comando se o conteúdo de $hostnamenão estivesse sob seu controle (como em hostname='%<a[`reboot`]<')
Simplesmente com o columncomando:
desculpe pela pergunta estúpida, mas onde devo colocar esse comando?
— Pijaaa 5/10
@pijaaa, veja minha atualização, canalize com a saída do seu script #
— RomanPerekhrest 5/17
Observe que column(um comando BSD, também portado para Linux e encontrado por padrão em algumas distribuições, não deve ser confundido com o GNU columns) precisará ler toda a entrada antes que possa começar a produzir algo, pois precisa calcular a largura das colunas com base em no mais largo.
Atualize seu script para inserir um número definido para \t(tabs) onde você deseja tabular para uma coluna.
A saída de algo semelhante ao seguinte forneceria o alinhamento necessário:
Seria pena acrescentar um pequeno exemplo baseado no roteiro na questão ...
@ StephenKitt ty Stephen, eu estava tentando descobrir como torná-lo mais do que apenas uma linha, e isso honestamente não me ocorreu!
Você notará que, com as paradas de tabulação padrão a cada 8 colunas, printf 'Network %s\t: Online\n' 8.8.8.8 192.168.122.123não se alinha adequadamente. Você pode contornar isso usando expandpara expandir as guias com uma parada de guia diferente, como mostrado na minha resposta.