Никак не получается реализовать поиск пути к USB-носителю в Lazarus.
Speccyfighter, дал замечательный совет, который может это сделать — при помощи команды:
ls -l $(find /dev/disk/by-id/ -name *usb*)|cut -d '>' -f2|sed 's/ ..\/../\/dev/'|grep -v sd[a-z][1-9]
В терминале данная команда работает так, как надо - возвращает путь подключенного к компьютеру USB. А вот использование этой же команды в программе, созданной в
Lazarus, не даёт такого же результата.
Пытался использовать для варианта:
1) класс Tprocess. Здесь
http://wiki.freepascal.org/Executing_External_Programs/ru находится пример, как это можно реализовать. Но проблема-то заключается в том, что Tprocess выполняет только простые команды, типо
ls -l или
ppc386 -h. Соответственно, с такой сложной командой (
ls -l $(find /dev/disk/by-id/ -name *usb*)|cut -d '>' -f2|sed 's/ ..\/../\/dev/'|grep -v sd[a-z][1-9]) не справляется.
2) функция popen (входит в состав модуля UNIX).
popen (f, 'ls -l $(find /dev/disk/by-id/ -name *usb*)|cut -d ''>'' -f2|sed ''s/ ..\/../\/dev/''|grep -v sd[a-z][1-9]', 'r');
Проблема та же самая - простые вещи выполняет без проблем, а вот сложные команды обрабатывает неверно. Причём заметил интересную особенность. Если задать на выполнение такую команду, как
ls -l $(find /dev/disk/by-id/ -name *usb*)|cut -d '>' -f2|sed 's/ ..\/../\/dev/'|grep -v sd[a-z][1-9], возвращает результат команды
ls -l (т. е. не перечень подключенных USB, а список файлов с правами доступа). Получается, что все операторы, следующие после
символа $, обрубаются и игнорируются.
Короче, уже и не знаю что делать...
Подскажите, каким ещё образом можно в Lazarus
выполнить команду и получить результат выполнения этой команды?