Возможно, в вашей установке Ubuntu отсутствуют некоторые пакеты OpenGL / GLX для использования GLX. Вы можете попробовать установить mesa-utils (OpenGL в зависимостях) и запустить glxgears и glxinfo, чтобы проверить это.
Создайте свой собственный сценарий, например в Python, который подсчитывает аргументы и вызывает ls (1)
с правильными аргументами и украшает его more (1)
для разбивки на страницы по мере необходимости (если вывод идет на tty) .
Вы можете поместить каждый листинг в отдельную строку, а затем использовать wordcount для подсчета строк и иметь оператор if else fi в зависимости от количества файлов.
files=$(ls "$@" | wc -l)
if [ $files -ge 50 ]
then
something
fi
извините, если это не то, что вы ищете.
Вот моя интерпретация вопроса. Он специфичен для bash, поскольку использует массив. Он определяет функцию с именем ls
(поэтому обязательно запустите unalias ls
, чтобы освободить путь для ее выполнения как просто ls
). Функция создает массив заданных аргументов (или текущего содержимого каталога, если аргументы не заданы); затем он подсчитывает эти элементы, чтобы определить, какие флаги ls
использовать (меньше 10, используйте ls -ld
; в противном случае используйте ls -d
); если файлов более 50, отображаются только первые 50 и отображается сообщение. Я также нагло скопировал идею Кевина / jlliagre о том, чтобы функция ls
вела себя более нормально, когда вывод не на экран.
Это не позволяет передавать флаги в реальный ls
; такие вещи, как -r
и -a
, потребуют особого внимания.
function ls {
_ls_longlimit=10
_ls_cutoff=50
declare -a _ls_files
[ ! -t 1 ] && { command ls "$@"; return; }
# TODO: skip past any "-rtxyz" options
if [ $# -eq 0 ]
then
_ls_files=(*)
else
for a in "$@"
do
if [ -d "$a" ]
then
# add "${a}/*" to array
_ls_files+=("${a}"/*)
else
# add $a to array
_ls_files+=("$a")
fi
done
fi
if [ ${#_ls_files[@]} -le $_ls_longlimit ]
then
command ls -ld "${_ls_files[@]}"
else
# -1 because arrays are 0-based
command ls -d "${_ls_files[@]:0:_ls_cutoff - 1}"
fi
if [ ${#_ls_files[@]} -gt $_ls_cutoff ]
then
echo $((${#_ls_files[@]} - _ls_cutoff)) more entries
fi
}
Если вам не нужна пользовательская команда сценария/оберточная функция, то вам нужна пользовательская двоичная команда. Доступны исходные тексты GNU ls
, а также другие реализации.
Создайте свою собственную исправленную версию ls
и вы будете готовы.
Обратите внимание, что это изменение в поведении нарушит соответствие POSIX.
Редактирование (в соответствии с вашим измененным вопросом):
ls() {
if [ $(command ls "$@" | wc -l) -gt 10 ]; then
command ls "$@" | head -50
else
command ls -l "$@"
fi
}
Улучшенная версия, показывающая количество оставшихся записей:
ls() {
[ ! -t 1 ] && { command ls "$@" ; return ; }
r=$(command ls "$@")
lines=$(printf "%s" "$r" | wc -l)
if [ $lines -gt 10 ]; then
printf "%s" "$r" | head -50
if [ $lines -gt 50 ]; then
printf "%d more entries\n" $((lines - 50))
fi
else
command ls -l "$@"
fi
}
Я не могу переопределить сам ls, но вы можете использовать эту функцию для ls2 ':
ls2 () {
num_of_files=`ls | grep "\/$" | wc -l`
if [ "$num_of_files" -gt "10" ]; then
ls | less
else
ls -l
fi
}
для создания специальной команды ls2, которая использует grep для поиска каталогов, а затем wc (функция подсчета слов unix с опцией количества строк), чтобы подсчитать их количество. Вы можете изменить количество файлов в сравнении «10». Вы можете изменить то, что на самом деле делается, изменив команды ls -l
и / или ls -a
Если вы не знакомы с функциями bash - поместите код в файл , затем chmod + x
файл, чтобы сделать его исполняемым, затем запустите файл с . the_filename
, а затем используйте функцию с ls2
. Для постоянного решения добавьте функцию в свой файл .bashrc
(и рассмотрите возможность создания файла, полученного из .bashrc
, чтобы вы могли начать добавлять больше функций в одном месте и не делать ваш файл .bashrc
неудобным.
Я не могу получить меньше, чтобы отображать записи за раз.
{{ 1}}