I am learning some bash scripting.
I am interested to learn about getting input for my scripts via a GUI interface. It seems that yad
(forked from zenity
) is the most robust tool for this. (But if there is a better choice I would like to hear about it too.)
Is it possible to obtain 2 or more named variables using yad
? Not just getting the values based on their positions ($1
, $2
, etc), with awk
. See “What doesn’t work” spoiler for those.
What doesn't work
I find how to obtain one named variable, for example:
inputStr=$(zenity --entry --title="My Title" --text="My Text:")
I also find solutions relying on opening single-variable dialogues sequentially but that’s a terrible interface.
Everything else relies on chopping up the output with awk
or based on the positions, $1
, $2
, $3
etc. In this script $jpgfile
is obtained:
jpgfile=$(echo $OUTPUT | awk 'BEGIN {FS="," } { print $1 }')
This seems unmanageable because adding a new field or failing to provide input for a field will both change the output order of every subsequent value. It’s way too fragile.
For a simple example, I want to ask the user for a file name and some content. Creating the dialogue is like this:
yad --title "Create a file" --form --field="File name" --field="Content"
If you fill both fields the output in the terminal is file|this is some text|
. How do I get them into variables like $filename
and $filecontent
? So then I can finish the script like this:
touch "$filename"
echo "$filecontent" > $filename
Is this possible??? I do not find it anywhere. I looked though all kinds of websites like YAD Guide, yad man page, smokey01. Maybe I missed something. On yaddemo I read about bash arrays and it seemed to come close but I couldn’t quite piece it together.
Wouldn’t it be easy to get them using awk by defining
|
as a field separator?It is the only solution I found. I described it in the post but put it behind a “spoiler” “What doesn’t work” to make the post shorter.
This seems unmanageable because adding a new field or failing to provide input for a field will both change the output order of every subsequent value. It’s way too fragile.