Dress Up Bash Scripts with YAD

Dmitri Popov

Productivity Sauce

Mar 12, 2012 GMT
Dmitri Popov

If you want to add a dash of GUI goodness to your Bash scripts, you have several options. You can use Zenity or Kdialog to quickly add simple dialogs and message boxes to Bash scripts. However, both tools are rather limited, and for a more complex GUI design you might want to give YAD a try. If you are using Ubuntu, you can install YAD from the WebUpd8 PPA. Of course, you can compile YAD from source using the standard ./configure; make; make install routine.

YAD can be used to add simple and advanced GUI elements to a Bash script with relative ease. For example, I need to resize photos I post on Google+ almost daily, so I whipped up a simple Bash script sprinkled with YAD GUI elements:

#!/bin/bash

imageFile=$(yad --file --title="Select the image file")

dialog=$(yad --title "Bash Resize" --form --field="Resize parameter" --field="Quality")

size=$(echo $dialog | awk 'BEGIN {FS="|" } { print $1 }')
quality=$(echo $dialog | awk 'BEGIN {FS="|" } { print $2 }')

convert "$imageFile" -resize "$size" -quality "$quality"% "$imageFile"

yad --title="Status" --width=300  --button="gtk-ok:0"  --text="All done. Yay!"

The imageFile=$(yad --file --title="Select the image file") statement creates a file selection dialog, while dialog=$(yad --title "Bash Resize" --form --field="Resize parameter" --field="Quality") creates a simple form containing two fields: Resize parameter and Quality. The output generated by the dialog box looks like this: 1600x || 95. So it's necessary to break it into separate values, which is done using awk (if there is a better way to do that, please do let me know). The obtained values are then passed to the convert tool which does the rest.

This is just a very simple example of YAD's capabilities and you can find other examples on the project's website.

Comments

  • yad

    size=${dialog%|*}
    quality=${dialog#*|}

    but ... why do you use '|' as a seperator? why not ',' or ':' or space or whatever? (at least something that will not interfer with the shell - to _my_ simple mind, '|' is somewhat 'loaded' though it works ok for this little example
comments powered by Disqus
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters

Support Our Work

Linux Magazine content is made possible with support from readers like you. Please consider contributing when you’ve found an article to be beneficial.

Learn More

News