Другой вопрос об экранировании строки Bash (с использованием echo)

Сначала установите xclip, imagemagick и jq!

pacman -S imagemagick jq xclip

У меня есть эта строка в моей конфигурации i3:

bindsym $mod+Print exec \
    import -window $( \
        i3-msg -t get_tree | \
        jq 'recurse(.nodes[]) | select(.focused).window' \
    ) png:- | \
    xclip -selection clipboard -t image/png

Это поместит скриншот активного окна в ваш буфер обмена, когда вы нажмете mod (Window / Alt) + Printscreen.

i3-msg -t get-tree получает все окна из i3 в формате json, затем мы используем jq для получения идентификатора окна, на которое наведен фокус. Мы передаем его команде импорта imagemagicks и передаем результат в xclip, который помещает его в буфер обмена!

0
14.09.2017, 19:37
2 ответа

Вы можете экранировать каждый проблемный символ с помощью\(см. ответ Hunter.S.Thompson )или просто использовать одинарные кавычки, при этом заключенная строка записывается как есть:

(sudo crontab -l ; echo '0 6 1-7 * * [ $(/usr/bin/date +\%u) == 7 ] && sh '"$script_path > $log_path") | sort -u | sudo crontab -

Лично я стараюсь избегать экранирования символов, так как считаю, что это ухудшает читабельность.

1
28.01.2020, 02:24

Вы можете использовать \перед знаком доллара, чтобы получить его буквальное значение.

(sudo crontab -l ; echo "0 6 1-7 * * [ \$(/usr/bin/date +\%u) == 7 ] && sh $script_path > $log_path") | sort - | uniq - | sudo crontab -
2
28.01.2020, 02:24

Теги

Похожие вопросы