На самом деле здесь можно было ответить: Условный конвейер
Этот ответ принимает оболочка if / then / else
и использует его для встраивания логики в конвейер. Вы также можете сделать это с помощью оператора &&
, но он не так понятен, поэтому я предпочитаю if
.
В основном в вашем случае строка tail
будет такой (обратите внимание также на изменение -z
на -n
):
tail -n +"$HEAD" "$1" |
head -n $((TAIL-HEAD+1)) |
if [ -n "${NUMBER+x}" ]; then cat -n; else cat; fi
( здесь могут быть некоторые ошибки, я не очень увлечен программированием оболочки Linux. Но вы поняли.)
X11 отправляет одиночные вызовы отрисовки, поставленные в очередь в синхронном конвейере, то есть каждый вызов ожидает подтверждения предыдущего (по -упрощенному ).
Если у вас есть соединение с высокой задержкой (для каждого отправленного сообщения ), это может быть намного медленнее, потому что все крошечные вызовы отрисовки (зависят от количества различных элементов, кнопок и т. д. необходимо нарисовать )это может занять очень много времени, даже если пропускная способность очень высока.
В этом случае VNC может превосходить -производительность, потому что он может отправлять много данных (фрагментов изображения экрана )за один раз, не дожидаясь ответов между ними.