Я могу выбрать, только один следует из шарика удара?

Попытка:

echo 100 > /proc/sys/vm/dirty_ratio

Это должно отложить блокирование, пока вся Ваша свободная память не используется для кэша записи.

14
06.04.2013, 00:05
5 ответов

Следующие работы в ударе 4.2:

list=( /<root_path>/<process_two_path>/logs/* )
echo "${list[-1]}"

Если Ваш удар является более старой версией:

list=( /<root_path>/<process_two_path>/logs/* )
echo "${list[${#list[@]}-1]}"
9
27.01.2020, 19:50
  • 1
    Это определенно работает над моим домашним компьютером, но я не могу гарантировать, что он будет работать на работе? –  Pureferret 06.04.2013, 00:04
  • 2
    @Pureferret часть, которая не могла бы работать, является отрицательным индексом массива (-1). Это было добавлено в ударе 4.2. RHEL5 является, вероятно, самым старым поддерживаемым основным доступным дистрибутивом предприятия, и он использует удар 4.2.20. –  Patrick 06.04.2013, 00:14
  • 3
    Более старые версии bash имейте: "${list[@]: -1}" как в ksh93 ([-1] прибывает из zsh). –  Stéphane Chazelas 06.04.2013, 00:26
  • 4
    @Patrick - RHEL5 использует удар 3.2. RHEL 3 и 4 все еще поддерживаемый под расширенной жизнью. –  jordanm 06.04.2013, 00:51
  • 5
    @Pureferret можно также сделать арифметику с длиной массива, видят мое редактирование. –  Gilles 'SO- stop being evil' 06.04.2013, 01:15

POSIXly:

 set -- /<root_path>/<process_two_path>/logs/*
 shift "$(($# - 1))"
 printf '%s\n' "$1"

Так как Вы упоминаете zsh:

 print -r /<root_path>/<process_two_path>/logs/*([-1])
10
27.01.2020, 19:50

Используйте шарик удара в ударе для цикла. Как это:

for filename in <logdir>/*; do :; done; echo "$filename"

Это зависит от того, что удар делает расширение шарика, отсортированное в алфавитном порядке. Прочитайте руководство удара для получения дополнительной информации. Обратите внимание, что это зависит от LC_COLLATE. Это также зависит от того, что переменная filename все еще содержит последнее значение после того, как цикл завершился.

Если Вы хотите имя файла с самой старой меткой времени, можно сделать это как это:

for filename in <logdir>/*; do echo "$filename"; break; done
4
27.01.2020, 19:50

- 1 значение по умолчанию в конвейерах, и вывод ls должен уже быть отсортирован:

ls | tail -n1

Если другие искали, как вставить первый или последний результат в интерактивном режиме, можно связать полный меню или menu-complete-backward в .inputrc:

"\e\t": menu-complete
"\e[Z": menu-complete-backward # shift-tab

Если show-all-if-ambiguous включен, set completion-query-items 0 удаляет подсказку, когда существует 101 или больше результат и set page-completions off отключает пейджер.

1
27.01.2020, 19:50
ls -tr | tail -1

Должен добиться цели.

-1
27.01.2020, 19:50

Теги

Похожие вопросы