Вопрос Ubuntu 14.04 subshell и переменное расширение в пользовательских сочетаниях клавиш?


Как включить расширение bash с помощью специальных сочетаний клавиш в 14.04? Вот пример, который я пытался настроить; Я хочу выполнить эту точную команду (которая работает от терминала с запуском bash):

gnome-screenshot --window --remove-border -f ~/Pictures/screenshot_$(date +%x_%H:%M:%S:%N).png

Он не работает так, как есть, и не делает:

gnome-screenshot --window --remove-border -f $HOME/Pictures/screenshot_$(date +%x_%H:%M:%S:%N).png

Если я изменю его на следующее:

gnome-screenshot --window --remove-border -f "/home/user/Pictures/screenshot_$(date +%x_%H:%M:%S:%N).png"

Я нахожу файл на моем рабочем столе под названием «screenshot _ $ (date +% x_% H:% M:% S:% N) .png» (без расширения подсечек). Что я делаю не так? Что выполняет эти команды, если не bash? Почему не расширяются подоболочки или переменные / тильды?


2
2017-08-08 03:21


происхождения




ответы:


Поле быстрых клавиш в Unity работает аналогично .desktop файлы, то есть команды выполняются без какой-либо формы расширения подсетей или переменных и не могут получить доступ к каким-либо переменным среды.

Я не смог найти официальную спецификацию, касающуюся меню быстрых клавиш, но я думаю, что это сохранить, чтобы предположить, что выполнение команды следует аналогичным рекомендациям для Поле Exec в XDG .desktop файлы.

На практике это означает, что есть два способа сделать вашу пользовательскую команду командной строки с меню ярлыков:

  1. Преобразуйте свои команды в простой сценарий оболочки и укажите комбинацию клавиш на сценарий оболочки. 

    Например, вы можете вставить следующее в новый текстовый файл, назовите его что-то вроде custom_screenshot_script и сделать исполняемый файл сценария:

    #!/bin/bash
    gnome-screenshot --window --remove-border -f "~/Pictures/screenshot_$(date +%x_%H:%M:%S:%N).png"
    
  2. Вызов bash для выполнения вашей команды.

    Это более сложно, потому что вам нужно избегать ваших аргументов правильно. Должно работать следующее:

    bash -c "gnome-screenshot --window --remove-border -f \"~/Pictures/screenshot_$(date +%x_%H:%M:%S:%N).png\""
    

4
2017-08-18 11:12





В моем случае я бы сделал сценарий:

/ Бен / ш

Случай (window_border) в         ~. / Фото

    gnome-screenshot --window ~/picture/screenshot_$(date+%X_% H:$M:$:$S:$n)*png

    Bash -i remove-border -f window

    Bash --window --remove-border -f ''~/picture/screenshot_$(date+%X_%H:$M:$:$S:$N).png''

епсИ

и это может работать отлично.


-2
2017-08-22 17:55