Не совсем понятно, но "убить" не застревает, так что,
while read pid; do kill "$pid"; done < "/scripts/pid_$DATE.txt"
или добавьте -9, чтобы убить, чтобы принудительно убить ваш процесс
Вы пытаетесь выполнить сортировку, используя всю строку в качестве ключа.
Имена объектов записываются в 9-й столбец, поэтому необходимо использовать:
ls -l /usr/bin/ | sort -k9 -r
Пусть ls
выполнит сортировку:
ls -l -r /usr/bin
или просто
ls -lr /usr/bin
Стандартная опция -r
для ls
заставляет сортировать список в обратном порядке. Если вы попросите ls
выполнить сортировку по отметке времени модификации с помощью -t
, -r
также изменит порядок этого списка и т. д.
Конвейер команд выполняет сортировку по разрешениям, владельцам и т. д., которые выводятся ls -l
, и не будет учитывать имена файлов, если вся остальная информация для двух записей не будет идентичной.
Вы не спрашивали об этом, но, поскольку это обычное дело, и часто это следующий шаг после вопроса ls
о порядке вывода... не используйте ls
, вместо этого используйте массив или позиционные параметры:
Имя первого файла:
names=(/usr/bin/*)
printf '%s\n' "${names[0]}"
или
set -- /usr/bin/*
printf '%s\n' "$1"
Последнее имя файла:
names=(/usr/bin/*)
printf '%s\n' "${names[-1]}"
или
set -- /usr/bin/*
shift "$(( $# - 1 ))"
printf '%s\n' "$1"
Аналогичным образом, лучший способ получить последний измененный файл (или каталог )в bash
— выполнить
set -- /usr/bin/*
newest=$1; shift
for pathname do
[ "$pathname" -nt "$newest" ] && newest=$pathname
done
printf 'Newest: %s\n' "$newest"
Измените тест -nt
на -ot
, чтобы получить самый старый (наименее измененный )файл.