hostname
команда производит имя хоста системы от систем локальная конфигурация имени хоста (мог быть/etc/hostname или/proc/sys/kernel/hostname или другой в зависимости от ОС).
Команда ping -c 1 <hostname>
движение должно выполнить поиск через libc сопоставитель (который может или не может быть DNS. например,/etc/hosts не является DNS) <hostname>
указанный и затем выполняют обратный поиск DNS возвращенного IP-адреса и сообщают, что имя в выводе ping управляет.
Как конкретный пример, предположите, что локальное системное имя хоста является fred, как указано в /etc/hostname
. hostname
команда возвратит 'fred'. Команда ping -c 1 fred
выполнит поиск DNS fred
(любой просто fred
или fred
полностью определенный такой как fred.domain.com
если домен по умолчанию domain.com
). Предположите, что тот DNS возвращает IP-адрес x.x.x.x
. ping
затем выполнит обратный поиск DNS IP-адреса x.x.x.x
, если никакое имя не возвращается ping
произведет IP-адрес x.x.x.x
, иначе ping
произведет любое именованное, был возвращен из обратного поиска, который мог быть другим именем такой как ethel.domain.com
.
Начиная с меньше 530 (выпущенный в декабре 2017), less --quit-if-one-screen
не переключается на альтернативный экран, если он читает меньше чем один экранный. Таким образом, у Вас не будет этой проблемы, если Ваша версия меньшего будет достаточно последней.
В более ранних версиях меньше должно решить, использовать ли альтернативный экран, когда он запускается. Вы не можете задержать тот выбор к тому, когда он завершается.
Вы могли звонить меньше, позволить ему использовать альтернативный экран и кошку содержание на основной экран, если меньше завершается автоматически. Однако я не знаю о способе обнаружить автоматическое завершение.
С другой стороны, не настолько трудно назвать кошку для коротких исходных данных и меньше для больших исходных данных, даже сохраняя буферизацию так, чтобы Вы не ожидали целого входа, чтобы начать видеть материал в меньше (буфер может быть немного более крупным — Вы ничего не будете видеть, пока у Вас не будет по крайней мере одного экранного из данных — но не намного больше).
#!/bin/sh
n=3 # number of screen lines that should remain visible in addition to the content
lines=
newline='
'
case $LINES in
''|*[!0-9]*) exec less;;
esac
while [ $n -lt $LINES ] && IFS= read -r line; do
lines="$lines$newline$line"
done
if [ $n -eq $LINES ]; then
{ printf %s "$lines"; exec cat; } | exec less
else
printf %s "$lines"
fi
Вы могли бы предпочесть видеть строки на основном экране, поскольку они входят и переключаются на альтернативный экран, если строки вызвали бы прокрутку.
#!/bin/sh
n=3 # number of screen lines that should remain visible in addition to the content
beginning=
newline='
'
# If we can't determine the terminal height, execute less directly
[ -n "$LINES" ] || LINES=$(tput lines) 2>/dev/null
case $LINES in
''|*[!0-9]*) exec less "$@";;
esac
# Read and display enough lines to fill most of the terminal
while [ $n -lt $LINES ] && IFS= read -r line; do
beginning="$beginning$newline$line"
printf '%s\n' -- "$line"
n=$((n + 1))
done
# If the input is longer, run the pager
if [ $n -eq $LINES ]; then
{ printf %s "$beginning"; exec cat; } | exec less "$@"
fi
Для медленных входов, таких как git log -Gregex
, вы хотите, чтобы:
A) линии появлялись на главном экране по мере их поступления, а затем переключитесь на другой экран, как только понадобится прокрутка (чтобы первые $LINES
вывода всегда отображались в прокрутке); если это так, используйте 2-ю из Gilles'овских ответов.
B) строк, которые будут отображаться на другом экране, но выйдите из другого экрана и распечатайте строки на главный экран, если прокрутка окажется ненужной (поэтому при прокрутке не будет выводиться никаких строк, если прокрутка понадобится); если это так, используйте скрипт, приведенный ниже:
Это тройник
-вход во временный файл, затем, как только -менее
выйдет из него cat
-в временный файл, если он содержит меньше строк, чем высота экрана:
#!/bin/bash
# Needed so less doesn't prevent trap from working.
set -m
# Keeps this script alive when Ctrl+C is pressed in less,
# so we still cat and rm $TMPFILE afterwards.
trap '' EXIT
TXTFILE=$(mktemp 2>/dev/null || mktemp -t 'tmp')
tee "$TXTFILE" | LESS=-FR command less "$@"
[[ -n $LINES ]] || LINES=$(tput lines)
[[ -n $COLUMNS ]] || COLUMNS=$(tput cols)
# Wrap lines before counting, unless you pass --chop-long-lines to less
# (the perl regex strips ANSI escapes).
if (( $(perl -pe 's/\e\[?.*?[\@-~]//g' "$TXTFILE" | fold -w "$COLUMNS" | wc -l) < $LINES )); then
cat "$TXTFILE"
fi
rm "$TXTFILE"
Используйте его с -экспортом PAGER='/путь/к/скрипту'
. Этого должно быть достаточно, чтобы заставить git
использовать его, если только вы уже не переопределили core.pager
.
Для возможных улучшений смотрите также мою немного более плотную версию этого скрипта на: https://github.com/johnmellor/scripts/blob/master/bin/least
Это давно решено в дистрибутивах на основе Red Hat путем изменения поведения параметра -F в less
исходном коде: см. этот патч из проекта Fedora, первая версия которого датируется 2008 годом.
Идея состоит в том, чтобы просто получить высоту терминала (то есть максимальное количество строк, которые могут отображаться одновременно) и опустить последовательности инициализации и деинициализации, когда файл умещается на одном экране. Таким образом, нет необходимости в опции -X, а -F можно последовательно использовать независимо от длины файла.
Версия без GNU v. 530 включает патч Fedora -, на который ссылается @paul -antoine -arras, и больше не будет выводить последовательность инициализации терминала, когда используется --quit-if-one-screen
и ввод подходит на одном экране.
$n
) – ThiefMaster 09.01.2014, 11:01#!/bin/bash
в Вашем сценарии, так как Вы используете определенную для удара конструкцию, поскольку это - Ваш сценарий, не будет работать над системами (такими как Ubuntu) где/bin/sh
не удар. – Gilles 'SO- stop being evil' 09.01.2014, 19:57less
мог также (но не делает), имеют дополнительный способ выйти, где он печатает текущее содержание экрана после отправки нестроки инициализации. Таким образом, Вы могли обладать преимуществом альтернативного экрана, не создающего помехи scrollback, но все еще оставить соответствующую часть страницы справочника или безотносительно на терминале после выхода. – Peter Cordes 09.06.2017, 11:14