O que eu ganho:
host:~ user$ cat example.txt
some texthost:~ stas$
O que eu quero obter:
host:~ user$ cat example.txt
some text
host:~ stas$
Existe uma maneira que eu possa fazer me cat
comportar assim?
Estou usando o bash no Mac OS X.
A maioria das ferramentas unix é projetada para funcionar bem com arquivos de texto. Um arquivo de texto consiste em uma sequência de linhas. Uma linha consiste em uma sequência de caracteres imprimíveis que termina com um caractere de nova linha. Em particular, o último caractere de um arquivo de texto não vazio é sempre um caractere de nova linha. Evidentemente, example.txt
contém apenas some text
sem nova linha final, portanto, não é um arquivo de texto.
cat
faz um trabalho simples; transformar arquivos arbitrários em arquivos de texto não faz parte desse trabalho. Algumas outras ferramentas sempre transformam sua entrada em arquivos de texto; se você não tiver certeza de que o arquivo que você está exibindo termina com uma nova linha, tente executar em awk 1
vez de cat
.
Você pode fazer com que o bash exiba seu prompt na próxima linha se o comando anterior deixar o cursor em algum lugar que não seja a última margem. Coloque isso em sua .bashrc
(variação do GetFree de uma proposta de Dennis Williamson ):
shopt -s promptvars
PS1='$(printf "%$((COLUMNS-1))s\r")'$PS1
cat
, por isso vou mantê-lo como último recurso no momento em que esse problema começar a me incomodar novamente.PROMPT_COMMAND
e, se não for 0, usar uma nova linha (\n
) como o primeiro caracterePS1
.Eu prefiro o seguinte método ...
Isso não avalia o conteúdo
example.txt
ou, ocasionalmente, adiciona uma nova linha. É apenas ecoar uma nova linha quando o gato está pronto, é fácil de lembrar, e ninguém está pensando se eles estão usando citações fortes ou fracas corretamente.A única desvantagem, na verdade, é que você obterá uma nova linha extra se o arquivo tiver sua própria linha final.
fonte
Comecei a usar a resposta de @ Gilles, mas descobri que, se o terminal alterasse o número de colunas, o prompt não estaria mais no início de uma linha, como esperado. Isso pode acontecer por vários motivos, incluindo tmux / screen splits, redimensionamento manual de um contêiner da GUI, alterações de fonte etc.
O que eu realmente queria era algo que adicionasse uma nova linha se o terminal começasse a imprimir seu prompt em algo diferente da primeira coluna. Para fazer isso, eu precisava descobrir como obter a coluna atual, que usei esta resposta para obter. A configuração final do prompt de trabalho está abaixo:
fonte
__get_terminal_column
?PS1="\n"
apenas terecho
e não precisar modificarPS1
.O problema pode ser que o seu exemplo.txt não tenha uma nova linha no final do seu arquivo.
fonte
cat
é o trabalho dele, então provavelmente estou procurando alguma solução alternativa.example.txt
não ter uma nova linha no final do arquivo, é o ponto principal da questão.Se você insistir em usar
cat
, isso funcionará para os dois tipos de arquivos, com e sem uma nova linha no final:Você pode transformá-lo em uma função com um nome de sua escolha (par
cat
) em.bashrc
:fonte
você também pode adicionar ao .bashrc
funciona para mim.
fonte