David C. Rankin wrote:
Bash gurus,
Here is one I don't understand. I needed a simple script to part gtkrc and convert the r,g,b (0.0-1.0) values to (0-255). So I decided to use 'calc' to get the floating point values. The script was:
#!/bin/bash
while read l; do [[ $l =~ , ]] && [[ ${l:0:1} != [#] ]] && { rgb=${l##*[{] } rgb=${rgb%\ \}*} rgb=${rgb//,} r=${rgb%% *} g=${rgb% *} g=${g#* } b=${rgb##* } _r=$(calc -p "255 * $r") _g=$(calc -p "255 * $g") _b=$(calc -p "255 * $b") echo "${rgb} => r:$r g:$g b:$b => r:$_r g:$_g b:$_b"; } done < gtkrc-file.txt
The sample gtkrc file is included at the end of the message. Running the script resulted in the error:
15:38 providence:~/cnf/kde3> sh parsegtkrc.sh "bg" is undefined
0.125 0.129 0.149 => r:0.125 g:0.129 b:0.149 => r:31.875 g:32.895 b:37.995
Huh? It worked, but only for the first value and threw a "bg" is undefined error?? OK, lets try it this way:
<snip> _r=$(echo "255*$r" | calc -p) _g=$(echo "255*$g" | calc -p) _b=$(echo "255*$b" | calc -p) <snip>
15:46 providence:~/cnf/kde3> sh parsegtkrc.sh 0.125 0.129 0.149 => r:0.125 g:0.129 b:0.149 => r:31.875 g:32.895 b:37.995 0.216 0.286 0.431 => r:0.216 g:0.286 b:0.431 => r:55.080 g:72.930 b:109.905 0.125 0.129 0.149 => r:0.125 g:0.129 b:0.149 => r:31.875 g:32.895 b:37.995 <snip -- All good!>
Why is my first invocation of calc not correct? What is the "bg" is undefined error? This is really bewildering because I can do:
#!/bin/bash
for((i=0;i<10;i++)); do mult=$((i+5)) num=$(calc -p "$mult * 5.1") echo "num: $num" done
So I don't see why the error was generated in the first place. What say the experts?
-------- sample gtkrc-file.txt ---------- # created by KDE, Mon May 21 13:27:49 2012 # # If you do not want KDE to override your GTK settings, select # Appearance & Themes -> Colors in the Control Center and disable the checkbox # "Apply colors to non-KDE applications" # # style "default" { bg[NORMAL] = { 0.125, 0.129, 0.149 } bg[SELECTED] = { 0.216, 0.286, 0.431 } bg[INSENSITIVE] = { 0.125, 0.129, 0.149 } bg[ACTIVE] = { 0.102, 0.106, 0.122 } bg[PRELIGHT] = { 0.125, 0.129, 0.149 }
base[NORMAL] = { 0.035, 0.051, 0.078 } base[SELECTED] = { 0.216, 0.286, 0.431 } base[INSENSITIVE] = { 0.125, 0.129, 0.149 } base[ACTIVE] = { 0.216, 0.286, 0.431 } base[PRELIGHT] = { 0.216, 0.286, 0.431 }
text[NORMAL] = { 0.882, 0.835, 0.702 } text[SELECTED] = { 1.000, 1.000, 0.776 } text[INSENSITIVE] = { 0.102, 0.106, 0.122 } text[ACTIVE] = { 1.000, 1.000, 0.776 } text[PRELIGHT] = { 1.000, 1.000, 0.776 }
fg[NORMAL] = { 0.918, 0.867, 0.729 } fg[SELECTED] = { 1.000, 1.000, 0.776 } fg[INSENSITIVE] = { 0.102, 0.106, 0.122 } fg[ACTIVE] = { 0.918, 0.867, 0.729 } fg[PRELIGHT] = { 0.918, 0.867, 0.729 } }
class "*" style "default"
gtk-alternative-button-order = 1
style "ToolTip" { bg[NORMAL] = { 1.000, 1.000, 0.863 } base[NORMAL] = { 1.000, 1.000, 0.863 } text[NORMAL] = { 0.000, 0.000, 0.000 } fg[NORMAL] = { 0.000, 0.000, 0.000 } }
widget "gtk-tooltip" style "ToolTip" widget "gtk-tooltips" style "ToolTip"
style "MenuItem" { bg[PRELIGHT] = { 0.216, 0.286, 0.431 } fg[PRELIGHT] = { 1.000, 1.000, 0.776 } }
class "*MenuItem" style "MenuItem"
Thanks for any insight you can provide. Yep, the '_r=$(echo "255*$r" | bc)' style also works fine as well.
why are you running sh filename.sh when the first line of filename contains this interpreter definition: #!/bin/bash -- To unsubscribe, e-mail: opensuse+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse+owner@opensuse.org