Lo que consigo:
host:~ user$ cat example.txt
some texthost:~ stas$
Lo que quiero obtener:
host:~ user$ cat example.txt
some text
host:~ stas$
¿Hay alguna manera de hacer que se cat
comporte así?
Estoy usando bash en Mac OS X.
La mayoría de las herramientas de Unix están diseñadas para funcionar bien con archivos de texto. Un archivo de texto consta de una secuencia de líneas. Una línea consiste en una secuencia de caracteres imprimibles que terminan con un carácter de nueva línea. En particular, el último carácter de un archivo de texto no vacío es siempre un carácter de nueva línea. Evidentemente, example.txt
solo contienesome text
sin nueva línea final, por lo que no es un archivo de texto.
cat
hace un trabajo simple; convertir archivos arbitrarios en archivos de texto no es parte de ese trabajo. Algunas otras herramientas siempre convierten su entrada en archivos de texto; Si no está seguro de que el archivo que está mostrando termina con una nueva línea, intente ejecutarawk 1
lugar de cat
.
Puede hacer que el bash muestre su solicitud en la siguiente línea si el comando anterior dejó el cursor en algún lugar que no sea el último margen. Ponga esto en su .bashrc
(variación por GetFree de una propuesta de Dennis Williamson ):
shopt -s promptvars
PS1='$(printf "%$((COLUMNS-1))s\r")'$PS1
cat
, por lo que lo mantendré como último recurso para el momento en que este problema vuelva a molestarme.PROMPT_COMMAND
y, si no es 0, usar una nueva línea (\n
) como primer carácter dePS1
.Prefiero el siguiente método ...
Esto no evalúa el contenido de
example.txt
ni agrega ocasionalmente una nueva línea. Simplemente hace eco de una nueva línea una vez que el gato está listo, es fácil de recordar y nadie está pensando si está usando citas fuertes o débiles correctamente.El único inconveniente, en realidad, es que obtendrá una nueva línea adicional si el archivo tiene su propia nueva línea final.
fuente
Comencé a usar la respuesta de @ Gilles, pero descubrí que si el terminal cambiaba el número de columnas, el mensaje ya no estaría al comienzo de una línea como se esperaba. Esto puede suceder por una variedad de razones, que incluyen divisiones de pantalla / tmux, cambio de tamaño manual de un contenedor de GUI, cambios de fuente, etc.
Lo que realmente quería era algo que agregaría una nueva línea si el terminal comenzara a imprimir su mensaje en algo diferente a la primera columna. Para hacer esto, necesitaba descubrir cómo obtener la columna actual, que utilicé para obtener esta respuesta . La configuración final del indicador de trabajo está a continuación:
fuente
__get_terminal_column
?PS1="\n"
solo tengoecho
y no necesito modificarPS1
.El problema con eso podría ser que su example.txt no tiene una nueva línea al final de su archivo.
fuente
cat
es el trabajo, así que probablemente estoy buscando alguna solución.example.txt
no tiene una nueva línea al final del archivo es el punto central de la pregunta.Si insiste en usar
cat
, esto funciona para ambos tipos de archivos, con y sin una nueva línea al final:Puede convertirlo en una función con un nombre de su elección (incluso
cat
) en su.bashrc
:fuente
puedes agregar a .bashrc también
funciona para mi.
fuente