简单的 Zenity 脚本 - 选择图标?

简单的 Zenity 脚本 - 选择图标?

我正在尝试制作一个简单的图形 Zenity+Bash 脚本,它将列出 中可用的所有图标主题/usr/share/icons,然后让用户选择一个并单击“确定”以替换gtk-icon-theme-name="Humanity"~/.gtkrc-2.0.mine显示他们选择的主题名称而不是 Humanity。我这样做是为了提供一种在 Openbox 下选择图标主题的图形方法,因为目前还没有主流程序可以做到这一点。

这是我目前所拥有的:

#!/bin/bash
ICONS=$(ls -I "*.*" /usr/share/icons); SELECTED=$(zenity --list --column=/usr/share/icons \ $ICONS); echo 'gtk-icon-theme-name="$SELECTED"' >~/.gtkrc-2.0.mine

它可以工作,只是 echo 实际上会写入$SELECTED文本文件,而不是采用参数并将其替换为用户的选择。

在此先感谢所有能帮助我学习此操作和 Zenity 基础知识的人。

答案1

这个很简单,如果要echo打印 的值$SELECT,就不要用单引号',而要用双引号"。下面是引号和反斜杠的含义。

  • 双引号(“quote”)保护两个双引号之间的所有内容,除了$、和。当您只需要变量和命令替换时,'请使用双引号。"\

    • 变量 - 是
    • 通配符 - 否
    • 命令替换-是
  • 单引号('quote')保护两个单引号之间的所有内容。它用于关闭所有字符的特殊含义。

    • 变量 - 否
    • 通配符 - 否
    • 命令替换-否
  • 使用反斜杠('\')来改变字符的特殊含义或者转义文本中的特殊字符,例如引号。

因此你的命令应该是:

#!/bin/bash
ICONS=$(ls -I "*.*" /usr/share/icons); SELECTED=$(zenity --list --column=/usr/share/icons \ $ICONS); echo "gtk-icon-theme-name=\"$SELECTED\"" >~/.gtkrc-2.0.mine

答案2

此外@TungTran的回答是,您的脚本需要改进。

将脚本塞到一行会使其难以阅读/理解/调试。每行写一个命令:

#!/bin/bash
ICONS=$(ls -I "*.*" /usr/share/icons)
SELECTED=$(zenity --list --column=/usr/share/icons \ $ICONS)
echo "gtk-icon-theme-name=\"$SELECTED\"" >~/.gtkrc-2.0.mine

在文本输出中嵌入变量的另一种有时不太麻烦的方法是使用printf

printf 'gtk-icon-theme-name="%s"\n' "$SELECTED" >~/.gtkrc-2.0.mine

相关内容