我正在尝试制作一个简单的图形 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