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.

  • yianiris@kafeneio.social
    link
    fedilink
    arrow-up
    1
    ·
    8 个月前

    I got the problem, some yad syntax when run as a command in bash it is read as bash script, take it, put it in a file, then run the file as script.

    Too many quotes in it for bash to leave unnoticed :)

    yad --title=“output of command in yad " --width=350 --height=82 --text-align=left --text=”$(grep a /etc/fstab)"

    grep ext /etc/fstab > /tmp/zz

    yad --title=“output of file in yad box” --width=350 --height=82 --text-align=left --text=“$(cat /tmp/zz)”

    @linuxPIPEpower