Открыть в fbless книгу fb2 через особое действие в Thunar

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
madesta
Сообщения: 2014
Зарегистрирован: 11 июн 2017, 21:47
Решено: 29
Откуда: BY
Благодарил (а): 79 раз
Поблагодарили: 431 раз
Контактная информация:

Открыть в fbless книгу fb2 через особое действие в Thunar

#1

27 мар 2022, 16:48

Имеется установленная программа fbless. Была предпринята попытка создать особое действие в Thunar для запуска fbless и последующей автоматической загрузки в неё выбранной книги fb2:
xfce4-terminal -H -x sh -c 'fbless %f; exec bash'
Для проверки через эту команду правого меню Thunar был открыт файл /home/minter/01/Хроники особого отдела.fb2. Попытка завершена неудачей с выводом ошибки:
FileNotFoundError: [Errno 2] Нет такого файла или каталога: '/home/minter/01/Хроники'
Error in sys.excepthook:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 153, in apport_excepthook
with os.fdopen(os.open(pr_filename,
FileNotFoundError: [Errno 2] Нет такого файла или каталога: '/var/crash/_usr_bin_fbless.1000.crash'

Original exception was:
Traceback (most recent call last):
File "/usr/bin/fbless", line 23, in <module>
MainWindow().main_loop()
File "/usr/lib/python3/dist-packages/fbless_lib/main.py", line 79, in __init__
self.content = create_content(self.filename, curses.COLS)
File "/usr/lib/python3/dist-packages/fbless_lib/main.py", line 1078, in create_content
data = open(filename, 'rb').read()
FileNotFoundError: [Errno 2] Нет такого файла или каталога: '/home/minter/01/Хроники'
Добавление кавычек в путь %f --> "%f" приводит к пустому окну терминала с заголовком "Дочерний процесс завершился нормально с кодом 2."
После переименования файла таким образом, чтобы в нём не содержалось пробелов, например:
Хроники особого отдела.fb2 --> Хроники-особого-отдела.fb2 - команда отрабатывается нормально и книга открывается.
Имеется ли способ "заставить" работать команду xfce4-terminal -H -x sh -c 'fbless %f; exec bash' таким образом, чтобы она понимала пути, содержащие пробелы?

inxi -Fzx (если необходимо):
System:
Kernel: 5.4.0-105-generic x86_64 bits: 64 compiler: gcc v: 9.4.0
Desktop: Xfce 4.16.0 Distro: Linux Mint 20.3 Una base: Ubuntu 20.04 focal
Machine:
Type: Desktop Mobo: ASRock model: J3455B-ITX serial: <filter>
UEFI [Legacy]: American Megatrends v: P1.30 date: 07/14/2017
CPU:
Topology: Quad Core model: Intel Celeron J3455 bits: 64 type: MCP
arch: Goldmont rev: 9 L2 cache: 1024 KiB
flags: lm nx pae sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx bogomips: 11980
Speed: 2196 MHz min/max: 800/2300 MHz Core speeds (MHz): 1: 2196 2: 2196
3: 2196 4: 2196
Graphics:
Device-1: Intel HD Graphics 500 vendor: ASRock driver: i915 v: kernel
bus ID: 00:02.0
Display: x11 server: X.Org 1.20.13 driver: modesetting
unloaded: fbdev,vesa resolution: 1360x768~60Hz
OpenGL: renderer: Mesa Intel HD Graphics 500 (APL 2) v: 4.6 Mesa 21.2.6
direct render: Yes
Audio:
Device-1: Intel Celeron N3350/Pentium N4200/Atom E3900 Series Audio Cluster vendor: ASRock driver: snd_hda_intel v: kernel bus ID: 00:0e.0
Sound Server: ALSA v: k5.4.0-105-generic
Network:
Device-1: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet
vendor: ASRock driver: r8169 v: kernel port: e000 bus ID: 02:00.0
IF: enp2s0 state: up speed: 100 Mbps duplex: full mac: <filter>
Drives:
Local Storage: total: 465.76 GiB used: 239.94 GiB (51.5%)
ID-1: /dev/sda vendor: Toshiba model: MQ01ABD050 size: 465.76 GiB
Partition:
ID-1: / size: 457.95 GiB used: 239.94 GiB (52.4%) fs: ext4 dev: /dev/sda1
Sensors:
System Temperatures: cpu: 56.0 C mobo: N/A
Fan Speeds (RPM): N/A
Info:
Processes: 182 Uptime: 3h 14m Memory: 3.51 GiB used: 796.4 MiB (22.2%)
Init: systemd runlevel: 5 Compilers: gcc: 9.4.0 Shell: bash v: 5.0.17
inxi: 3.0.38

Решение slant » 31 мар 2022, 14:30
Попробуй заменить одинарные кавычки на двойные вот так: xfce4-terminal -H -x sh -c "fbless %f; exec bash"

Перейти к ответу ➙

Аватара пользователя

slant
Сообщения: 4506
Зарегистрирован: 21 июн 2017, 18:09
Решено: 99
Благодарил (а): 51 раз
Поблагодарили: 1993 раза
Контактная информация:

Открыть в fbless книгу fb2 через особое действие в Thunar

#2

31 мар 2022, 14:30

Попробуй заменить одинарные кавычки на двойные вот так: xfce4-terminal -H -x sh -c "fbless %f; exec bash"

Аватара пользователя

Автор темы
madesta
Сообщения: 2014
Зарегистрирован: 11 июн 2017, 21:47
Решено: 29
Откуда: BY
Благодарил (а): 79 раз
Поблагодарили: 431 раз
Контактная информация:

Открыть в fbless книгу fb2 через особое действие в Thunar

#3

01 апр 2022, 03:21

Так и хочется воскликнуть: "А чё, так можно было?!" :cray2:
Всё от недостатка извилин под кепкой :-D
Я уже стал городить конструкцию запроса полного пути, экспорта его в файл, а потом через cat подкладывания в запрос:
realpath %f > /tmp/fbless.txt && xfce4-terminal -H -x sh -c 'fbless "$(cat /tmp/fbless.txt)"; exec bash'
Но решение slant, думаю, более правильное.

Аватара пользователя

slant
Сообщения: 4506
Зарегистрирован: 21 июн 2017, 18:09
Решено: 99
Благодарил (а): 51 раз
Поблагодарили: 1993 раза
Контактная информация:

Открыть в fbless книгу fb2 через особое действие в Thunar

#4

01 апр 2022, 03:46

Разница в обработке одинарных и двойных кавычек в sh (и bash): в случае одинарных, то что в них находится передается далее "как есть". В случае двойных - вместо переменной подставляется ее значение, причем спецсимволы еще и экранируются. В том числе и пробелы.

В твоем случае %f все равно менялся на значение, т.к. это не переменная а макрос, но только уходило далее оно необработанное "как есть". В двойных же кавычках интерпретатор сначала проведет экранирование.
Тот же самый механизм работает когда ты просто пишешь в командной строке, скажем, cp "мой файл" newfile - пробел экранируется и в команду уходит имя без пробелов в качестве одного, первого параметра. А без кавычек cp будет пытаться слить два файла (с именами "мой" и "файл") в один (newfile) - все параметры имен файлов кроме последнего у него исходники, а отделяются друг от друга пробелами...

А вот одинарные кавычки блокируют внутри себя и нормальное поведение двойных. Т.е. когда ты добавлял их к только к %f - они просто становились частью строки - имени файла. Вот и получалось, что файла просто нету.

Закрыто

Вернуться в «Иное программное обеспечение»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя