Из экспериментов кажется, что даже при использовании ps aux | grep ...
выход зависит от размера терминала. Мне это кажется очень странным.
Разве конвейер не должен обеспечивать предсказуемое поведение вывода команды?
Например ls
делает всю причудливую магию форматирования при запуске самостоятельно, но при запуске как ls | less
он всегда возвращает один и тот же стиль вывода.
Но в отличие от ls вывод ps aux | less
обрезает строки до ширины терминала во FreeBSD (по крайней мере, на bash). Судя по моим кратким экспериментам, одна и та же команда всегда выводит полные строки в Linux при использовании с конвейерами.
Почему это происходит и как это исправить?
Неужели это действительно странный дефолт FreeBSD? Насколько я понимаю, эта «функция» сделает практически невозможным написание надежных сценариев bash на FreeBSD, поскольку вывод простых команд конвейерной обработки не будет надежным. Разве это не проблема?
Обновление: Спасибо Берту, я пробовал с ps aux > somefile
и строки внутри файла обрезаны точно так же, как это было с grep и меньше!
Информация: FreeBSD 10.2, bash 4.3.42, то же самое при подключении через SSH или при локальном входе в систему через KVM.
Это делает не трубопровод. Часть вашей проблемы - ваш пейджер, less
. По умолчанию он обрезается до той же длины, что и ваш терминал. Вы можете исправить это, запретив ему этого делать:
ps aux | less -S
ps
определяет ширину окна и выводит, чтобы соответствовать
В страница руководства есть один способ обойти это:
-w Использовать 132 столбца для отображения информации вместо размера окна по умолчанию. Если опция -w указана более одного раза, ps будет использовать столько столбцов, сколько необходимо, независимо от размера вашего окна. Обратите внимание, что этот параметр не действует, если столбец «команда» не является последним отображаемым столбцом.
Другое решение - передать вывод в файл
ps aux > somefile