Как я знаю идентификатор процесса родительского процесса?

Подстановочные знаки разворачивают имена файлов в лексикографическом порядке. Так как Ваш формат даты соответствует лексикографическому порядку, Ваше требование сводит к сохранению последнего X соответствий для подстановочного знака (или все соответствия, если существуют меньше чем X). Я предположу, что Ваши резервные копии являются соответствием файлов $device.*, скорректируйте шаблон по мере необходимости.

В zsh:

set -- $device.*
if [[ $# -gt $X ]]; then set -- $@{[-$X,-1]}; fi
cp -- $@ /retain/area/

В любой оболочке стиля Границы (пепел, удар, ksh, …):

set -- "$device".*
if [ $# -gt $X ]; then shift $(($#-$X)); fi
cp -- "$@" /retain/area

Если то, что Вы хотите, должно на самом деле удалить более старые файлы, необходимо действовать на первые соответствия, но X (или никакие соответствия, если существуют меньше чем X).

В zsh:

files=($device.*)
rm -f -- $files[1,-$X-1]

В других оболочках:

set -- "$device".*
while [ $# -gt $X ]; do
  rm -- "$1"
  shift
done
2
15.04.2013, 17:02
2 ответа

Принятие оболочки POSIX (как bash), $$ PID текущей оболочки и $PPID PID родителя. Можно передать $$ к сценарию или проверке значение $PPID в сценарии.

6
27.01.2020, 21:51

Идентификатор процесса текущей оболочки находится в специальной переменной $$.

Можно передать это разветвленному (фон) процесс:

./script $$ &

В "сценарии", который будет первым аргументом, таким образом:

parent_pid=$1

Существует сводка специальных переменных удара здесь.

2
27.01.2020, 21:51

Теги

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