LINUX.ORG.RU

[bash] Отображение информации о том, какой процесс занял файл

 


0

0

Написал скрипт под Nautilus, вроде работает (GNU bash 3.2.39(1)).
Поскольку скриптописатель я пока неумелый,
выкладываю здесь для ваших замечаний.
================================================================
#!/bin/sh
# ~/.gnome2/nautilus-scripts/get info/who has opened the file
# Отображение информации о том, какой процесс занял файл.

# получаем пути файлов, разделённые символами "|"
filePaths=`echo -e "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | \
awk 'BEGIN { FS = "\n" } {if ($1 != "") { printf "|%s", $1 }}' | \
sed -e 's/^|//'` # убрать лидирующий символ "|"

filePaths=$(echo "$filePaths" | sed -e 's/\x2F/\\\x2F/g') # замена "/" на "\/"
filePaths=$(echo "$filePaths" | sed -e 's/\./\\\./g') # замена "." на "\."

strRes=`lsof | awk "/$filePaths/"`
if [ ${#strRes} -eq 0 ] ; then
    zenity --info --text="Файлы свободны."
else
    zenity --info --text="$strRes"
fi
================================================================
Порядок работы скрипта.

Используем команду lsof для получения информации о том,
какие процессы заняли нужные нам файлы.
Вывод команды lsof скармливаем awk,
а шаблоном для поиска в этом выводе являются пути
нужных нам файлов в виде регулярного выражения:
пути, разделённые "|", чтобы поиск строк шёл по принципу "или".

Перед этим получаем список путей, разделённых "|":
1. С помощью awk разбираем $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS,
которая содержит список путей, разделённых переводами строк.
2. Экранируем прямые слеши и точки.

Жду ваших замечаний.

Ответ на: комментарий от redgremlin

>> А чем fuser не устроил?

В основном тем, что я о нём не знал :)))
Однако, похоже, он показывает меньше инфы,
так что я не промахнулся. Спасибо :)

The_gray_Cardinal
() автор топика

Поздравляю, ты только что переизобрёл fuser и lsof! =)

AX ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.