LINUX.ORG.RU
ФорумAdmin

Доступ к «содержимому» аргумента выбранных файла

 , , , ,


0

1

Приветствую.

Скрипт для действия ФМ Dolphin в Plasma привязывается к аргументу '$1' выбранного файла. Если выбрать N файлов, то этот аргумент '$1' содержит N имен. Это видно, например, если:

kdialog --title "..." --passivepopup "\"$*\""

Но:

echo "\"$*\""

- показывает только имя одного файла, хотя выбрано N.

Никаких иных аргументов (кроме '$0' и '$1') не передается.

Как вытащить эти имена из '$1'? Или просто их подсчитать хотя бы? То есть увидить какие файлы были обработаны или хотя бы сколько.


Скрипт для действия ФМ Dolphin в Plasma привязывается к аргументу '$1' выбранного

Думаю, ты хотел сказать «Dolphin вызывает скрипт, передавая ему имя выделенного файла в $1».

Так вот, имена второго и следующего файлов должны идти в $2, $3 и т.д., а не склеиваться в $1. Последнее происходит если использовать "$*" вместо "$@".

Между $* и $@ есть разница при раскрытии в кавычках и в большинстве случаев $@ удобнее.

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

«Dolphin вызывает скрипт, передавая ему имя выделенного файла в $1»

Да, всё верно. Я просто смотрел на процесс «со стороны» скрипта )

Так вот, имена второго и следующего файлов должны идти в $2, $3 и т.д., а не склеиваться в $1

Наверное должны, но не идут:

Никаких иных аргументов (кроме '$0' и '$1') не передается

На самом деле, если направить в файл, то все N показывает верно:

echo "$1" >> ~/filename

Ну и оттуда уже можно обработать как надо. Но возможно ли как-то проще?

mexx
() автор топика
Ответ на: комментарий от legolegs

В конфиге dolphin как свой скрипт указываете?

Никак. Это локальное контекстное действие. То есть name.desktop в ~/.local/share/kservices5/ServiceMenus и там указание на скрипт вида Exec=$HOME/name.sh

mexx
() автор топика
Ответ на: комментарий от legolegs

а не склеиваться в $1

Получается, не «склеиваются» они, получается ФМ по очереди передает аргументы для выделенных файлов. То есть сначала '$1' для file1, затем '$1' для file2 и так до '$1' для fileN.

mexx
() автор топика
Ответ на: комментарий от mexx

Там можно и по скрипту на файл и по куче файлов на один экземпляр скрипта. Тут кто-то уже делал себе такую штуку и задал вопросы.

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от legolegs

Я не могу найти решение.

Ведь скрипт выполняется каждый раз до выхода и всё, что указано в скрипте до 'exit', будет выполнено N раз. Даже вывод имён в файл будет осуществляться построчно, пока не закончатся выделенные файлы.

mexx
() автор топика
Ответ на: комментарий от mexx

То есть выполняется действие (то есть в моем случае скрипт) последовательно для каждого выбранного объекта.

mexx
() автор топика
Ответ на: комментарий от mexx

Думаю, тебе будет полезно посмотреть этот коммент и ссылку из него: Создать директорию рядом с файлом (комментарий)

Ну и вот этот ещё как законченный пример: Скрипт разнести все файлы в директории по нужному количеству в новые директории (комментарий)

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от legolegs

Спасибо за ссылки, но это не то.

По ссылке к первому комменту верно написано:

То есть выделил 100 объектов и этот скрипт будет 100 раз создавать папку.

И у меня скрипт обработает N выделенных объектов. Хоть 1, хоть 100. Но каждый раз по одному, по ‘$1’. А надо узнать сколько обработано всего, то есть N.

mexx
() автор топика
Ответ на: комментарий от mexx

Ну и допиши в desktop-файле %F, тогда внутри скрипта у тебя "$@" развернётся в "file 1" "file 2" "file 3". В примерах по ссылке это есть.

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от legolegs

Ну и допиши в desktop-файле %F

Воооот! Теперь для каждого выбранного объекта передается свой аргумент. То, что надо. Заработало. СПАСИБО!

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