Su secuencia de comandos se comunica con less
a través de una tubería . Pipe es una secuencia de bytes en la memoria que conecta dos puntos finales: la secuencia de comandos y el programa less
, la primera salida de escritura a la misma y la última lectura de la misma.
Como las tuberías están en la memoria, no sería agradable si crecieran arbitrariamente grandes. Por lo tanto, de forma predeterminada, hay un límite de datos que pueden estar dentro del conducto (escritos, pero aún no leídos) en cualquier momento dado. Por defecto es 64k en Linux. Si la tubería está llena y su secuencia de comandos intenta escribir en ella, escriba los bloques. Así que su script no está funcionando, se detuvo en algún momento al hacer una llamada write()
.
¿Cómo superar esto? Ajustar los valores predeterminados es una mala opción; lo que se usa en su lugar es asignar un búfer en el lector, de modo que se lea en el búfer, liberando la tubería y permitiendo así que el programa de escritura funcione, pero le muestra (o maneja) solo una parte de la salida. less
tiene dicho búfer y, de forma predeterminada, lo expande automáticamente. Sin embargo, no lo llena en segundo plano, solo lo rellena a medida que lee la entrada.
Así lo resolvería su problema está leyendo el archivo hasta el final (como lo haría normalmente presione G), y luego ir de nuevo al principio (como lo haría normalmente presione g). La cosa es que usted puede especificar estos comandos a través de línea de comandos de la siguiente manera:
./script | less +Gg
debe tener en cuenta, sin embargo, que va a tener que esperar hasta que las cargas de salida de toda la secuencia de comandos en la memoria, por lo que no podrán para verlo de una vez less
no es lo suficientemente sofisticado para eso.Pero si eso es lo que realmente necesita (navegar por el inicio de la producción, mientras que el ./script
todavía está calculando su fin), es posible que desee utilizar un archivo temporal:
./script >x & less x ; rm x
Quizás esa página particular de la salida tenga una gran cantidad de texto, por ejemplo, si hay una línea horizontal extremadamente larga. – ninjagecko