Com o comando de exemplo
man apropos > outputfile
é gerado um arquivo de texto que contém a man
página formatada de apropos
(com algumas pequenas diferenças em relação a man apropos
impressos diretamente na tela, como caracteres em negrito).
Mas eu gostaria de definir manualmente a largura máxima da linha do arquivo de saída gerado, para que todos os parágrafos sejam justificados para essa largura.
man
as páginas são criadas através de groff
: por exemplo, tentei colocar .ll 50
antes de um parágrafo do .gz
man
arquivo de texto original , mas é trivial se eu precisar trabalhar em várias man
páginas. Além disso, nem todos os personagens são reconhecidos:
apropos.1:45: warning: can't find character with input code 195
apropos.1:45: warning: can't find character with input code 168
apropos.1:47: warning: can't find character with input code 178
apropos.1:131: warning: can't find character with input code 169
Então, eu me pergunto se existe um método mais direto. Como modificar a largura máxima da linha, durante a criação de um outputfile
? Existe algum comando específico?
Editar :
(Todas as considerações a seguir são sobre o Ubuntu 18.04: Não posso mais testá-las nas versões anteriores, incluindo a 14.04 da pergunta acima.)
No que diz respeito a uma solução temporária de uma linha, se MANWIDTH
ainda não tiver sido exportada com um valor personalizado, não há diferença entre
$ MANWIDTH=60 man apropos > outputfile
e
$ COLUMNS=60 man apropos > outputfile
O primeiro, usando MANWIDTH
, é no entanto melhor em princípio.
Editar 2 (não estritamente relacionado à pergunta):
Para criar uma configuração de largura permanente a ser aplicada a qualquer impressão de página de manual, é necessário exportar o valor desejado da variável. Com:
$ export MANWIDTH=60
# zero or more additional lines
$ man apropos > outputfile
man apropos
será impresso com a mesma largura, independentemente de qualquer redimensionamento da janela do terminal. Em vez de,
$ export COLUMNS=60
# zero or more additional lines
$ man apropos > outputfile
fornecerá o mesmo resultado de antes apenas se a janela do terminal não for redimensionada entre export
e man <page> > outputfile
.
input code
erros195 168
podem estar em UTF-8. A página do manual está em inglês? Qual é a sua implementação man? Qual é a sua localidade?man man
é 2.6.7.1). A página do manual está em italiano e é UTF-8. O que você quer dizer com localidade?locale
? elocale charmap
?locale
saída:LANG=it_IT.UTF-8 LANGUAGE= LC_CTYPE="it_IT.UTF-8" LC_NUMERIC="it_IT.UTF-8"
locale charmap
saída:UTF-8
less
porqueTERM
não está definido. Eu quis dizerenv -i LANG=it_IT.UTF-8 man apropos > output
(ou| head
).Respostas:
Use a
MANWIDTH
variável de ambiente:A página de manual do man 2.7.4 diz:
Ou seja, substitui ambos
COLUMNS
e oioctl
valor. Prefiro não confiar na modificaçãoCOLUMNS
(embora funcione aqui), pois seu valor é atualizado dinamicamente sempre que o tamanho da janela é alterado.Usar em
MANWIDTH
vez deCOLUMNS
também permite que você faça a alteração permanente, adicionando uma linha comoexport MANWIDTH=60
no seu arquivo de inicialização do shell.fonte
export MANWIDTH=60
se definir isso no seu~/.bashrc
. Consulte stackoverflow.com/a/30173376/82216 . Além disso, considereman
agrupar uma função para definir MANWIDTH dependendo da largura do seu terminal, conforme sugerido aqui no wiki do Arch.export MANWIDTH=60
?export
porque você perguntou sobre uma solução temporária: "Como modificar a largura máxima da linha, durante a criação de um arquivo de saída? " (Ênfase minha). Você pode até reverter sua edição, pois ela não contribui para a pergunta. (Um comentário é mais apropriado.)export
declarações, porque em um comentário seria quase ilegível (não sendo possível criar novas linhas).Tente definir a
COLUMNS
variável de ambiente. Obras para me comman
a partir demandb
2.7.0.2 no Debian comgroff
1.22.3.Com a versão no Ubuntu 14.04, preciso escrever:
Lá,
man
parece desconsiderar aCOLUMNS
variável de ambiente se stdin for um terminal (ele consulta o dispositivo do terminal quanto à largura do terminal).Você também pode tentar:
Com
zsh
você, você pode reduzir para:Você pode fazer isso invocando
groff
manualmente como:Seu personagem não pode se encontrar com código de entrada erros foram porque você usou
-Tascii
em vez de-Tutf8
e não usar-k
a pré-processar os arquivos compreconv
.fonte
COLUMNS=60 man apropos | head
:, mas infelizmente a largura de saída é toda a largura da tela. Posso definir a variávelCOLUMNS
em outro lugar ou de outra maneira?COLUMNS=60 < /dev/null man apropos | head
. Parece que no Ubuntu 14.04, não confiaCOLUMNS
se stdin é um terminal (e obtém a largura do dispositivo do terminal).Você pode usar o
fmt
comando, que, tanto quanto eu sei, está presente em qualquer distribuição Linux.irá agrupar linhas com 70 caracteres.
fonte
Você pode usar
fold
dobrará após cada 20 caracteres (!). Observe que isso cortará as palavras em dois, pois a única opção é "dobrar a cada 20 caracteres"
cuidando disso, você pode usar
sed
o seguinte (com comprimento de linha dinâmico)adicionará uma nova linha após 20 caracteres aleatórios seguidos por um espaço (ou seja, nova palavra). Portanto, as linhas podem ter mais de 20 caracteres (a correspondência é de 20 caracteres e um espaço para que uma palavra de 26 caracteres resulte em uma linha de 26 caracteres)
Para omitir o último espaço no
sed
comando:fonte