LINUX.ORG.RU

Не запускается через i3 и скрипт команда, содержащая экранирование

 , , ,


0

3

.config/i3/config:

set $terminal   xfce4-terminal
set $config     /home/user/.config/i3
bindsym $mod+F2         exec $config/ror.sh [title="Htop"]                      $terminal -T Htop -e 'sudo htop'
.config/i3/ror.sh:
#!/bin/sh
criteria="$1"
shift
[ "$(i3-msg "$criteria" focus)" = '[{"success":true}]' ] || i3-msg exec "$*"
Не запускается по непонятным причинам - при нажатии бинда ничего не происходит. Рядом есть
bindsym $mod+a          exec $config/ror.sh [title="Ncmpcpp"]                   $terminal -T Ncmpcpp -e ncmpcpp
и оно работает.
xfce4-terminal -e 'sudo htop'
из командной строки тоже работает.

Пожалуйста, помогите решить эту проблему.

★★

Последнее исправление: Norong (всего исправлений: 4)

Не помню как экранировать символы в конфиге... попробуй обернуть вызываемый 'sudo htop' в кавычки ('\"sudo htop\"'). Мне кажется, что иначе xfce4-terminal будет пытаться запускаться так: xfce4-terminal -e sudo htop.

Либо запускай i3-msg так: exec i3-msg exec "$@". "$@" (с обязательными кавычками) представляет данные отлично от "$*".

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

Я прочитал в мане i3 (http://i3wm.org/docs/userguide.html#exec_quoting), что надо экранировать, если есть , или ; в команде, но это - не тот случай.

Однако,

$terminal -T Htop -e '\«sudo htop\»'

Сработало на ура. Большое тебе спасибо!

Ты не мог бы пояснить, почему потребовалось добавить двойные кавычки, да ещё и их заэкранировать?

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

У тебя xfce4-terminal вызывался с аргументами -e, sudo и htop. Двойные кавычки нужны для того, чтобы объединить последние два в один (т. е. вызвать xfce4-terminal с двумя аргументами: -e и sudo htop). Попробуй выполнить из-под терминала следующие две команды:

$ xfce4-terminal -e sudo htop
$ xfce4-terminal -e "sudo htop"

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

Да, вижу, что первый вариант не работает, а второй работает. Предположу, что происходит так: мой скрипт получает несколько аргументов: [title=«htop»], xfce4-terminal, -T, Htop, -e, sudo htop. После чего первый забирает себе, а остальные склеивает пробелами в одну строку, строка: xfce4-terminal -T Htop -e sudo htop. Ну и это - не то, что нужно. Если же добавляются эти экранированные двойные кавычки, то последний аргумент выглядит как «sudo htop» и остаётся таким же, результирующая строка: xfce4-terminal -T Htop -e «sudo htop», это победа. Но я заметил, что если убрать одинарные кавычки, то

$terminal -T Htop -e \"sudo htop\"
не работает. Почему так получается? Вроде, скрипт должен как раз получить строки: [title=«htop»], xfce4-terminal, -T, Htop, -e, «sudo, htop», точно так же склеить их в xfce4-terminal -T Htop -e «sudo htop» и всё так же, как в прошлый раз.

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