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

我正在尝试制作一个简单的图形Zenity + Bash脚本,它将列出/usr/share/icons可用的所有图标主题,然后让用户选择一个并单击“确定”以替换gtk-icon-theme-name="Humanity"~/.gtkrc-2.0.mine中说出他们选择的主题名称而不是人性。 我这样做是为了提供一个在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基础知识的人。

这很简单。 如果你想要echo来打印$SELECT的值,你不应该使用单引号' ,而是使用双引号。以下是引用和反斜杠的含义。

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

    • 变量 – 是的
    • 通配符 – 没有
    • 命令替换 – 是的
  • 单引号 (’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 

除了@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