Home > Enterprise >  Can't find out what's wrong in a rofi drun bash script, says error on line 107: syntax err
Can't find out what's wrong in a rofi drun bash script, says error on line 107: syntax err

Time:10-24

I recently modified one of adi1090x's rofi scripts to fit singular rofi theme, and I can't seem to find out why it isn't working. The entire code is listed below:

#!/usr/bin/env bash

## Music Player Controls

# Import Current Theme
dir="~/.config/polybar/cuts/scripts/rofi"
theme="$dir/mpd.rasi"

# Elements
status="`mpc status`"
if [[ -z "$status" ]]; then
    prompt='Offline'
    mesg="MPD is Offline"
else
    prompt="`mpc -f "%artist%" current`"
    mesg="`mpc -f "%title%" current` :: `mpc status | grep "#" | awk '{print $3}'`"
fi

if [[ ${status} == *"[playing]"* ]]; then
    option_1=" Pause"
else
    option_1=" Play"
fi

option_2=" Stop"
option_3=" Previous"
option_4=" Next"
option_5=" Repeat"
option_6=" Random"

# Toggle Actions
active=''
urgent=''
# Repeat
if [[ ${status} == *"repeat: on"* ]]; then
    active="-a 4"
elif [[ ${status} == *"repeat: off"* ]]; then
    urgent="-u 4"
else
    option_5=" Parsing Error"
fi

# Random
if [[ ${status} == *"random: on"* ]]; then
    [ -n "$active" ] && active =",5" || active="-a 5"
elif [[ ${status} == *"random: off"* ]]; then
    [ -n "$urgent" ] && urgent =",5" || urgent="-u 5"
else
    option_6=" Parsing Error"
fi

#Finally, the actual command.
rofi_cmd() {
    rofi \
        -dmenu \
        -p "$prompt" \
        -mesg "$mesg" \
        ${active} ${urgent} \
        -markup-rows \
        -theme "$theme" \
}

# Pass variables to rofi dmenu
run_rofi() {
    echo -e "$option_1\n$option_2\n$option_3\n$option_4\n$option_5\n$option_6" | rofi_cmd
}

# Execute Command
run_cmd() {
    if [[ "$1" == '--opt1' ]]; then
        mpc -q toggle && notify-send -u low -t 1000 " `mpc current`"
    elif [[ "$1" == '--opt2' ]]; then
        mpc -q stop
    elif [[ "$1" == '--opt3' ]]; then
        mpc -q prev && notify-send -u low -t 1000 " `mpc current`"
    elif [[ "$1" == '--opt4' ]]; then
        mpc -q next && notify-send -u low -t 1000 " `mpc current`"
    elif [[ "$1" == '--opt5' ]]; then
        mpc -q repeat
    elif [[ "$1" == '--opt6' ]]; then
        mpc -q random
    fi
}

# Actions
chosen="$(run_rofi)"
case ${chosen} in
    $option_1)
        run_cmd --opt1
        ;;
    $option_2)
        run_cmd --opt2
        ;;
    $option_3)
        run_cmd --opt3
        ;;
    $option_4)
        run_cmd --opt4
        ;;
    $option_5)
        run_cmd --opt5
        ;;
    $option_6)
        run_cmd --opt6
        ;;
esac

When ran it displays /home/chaossys/.config/polybar/cuts/scripts/mpd.sh: line 107: syntax error: unexpected end of file which as far as I'm aware means there's a missing bracket and/or quote end, or missing fi, but i can't seem to find it.

Any and all help is appreciated.

CodePudding user response:

Rici, while ultimately not providing the correct answer, helped me discover that I had accidentally escaped a close-brace, which caused it to not see the pair properly. A simple deletion of the "" in line 60 allowed the script to work.

Thank you for the site Rici, I'll be sure to use that more often, since it let me know that the "}" in line 61 was treated as literal.

CodePudding user response:

If you use https://shellcheck.net (as recommended in the tag summary), you'll get the following:

Line 53:
rofi_cmd() {
^-- SC1009 (info): The mentioned syntax error was in this function.
           ^-- SC1073 (error): Couldn't parse this brace group. Fix to allow more checks.
 
Line 61:
}
^-- SC1083 (warning): This } is literal. Check expression (missing ;/\n?) or quote it.
 
Line 106:
esac
    ^-- SC1056 (error): Expected a '}'. If you have one, try a ; or \n in front of it.
    ^-- SC1072 (error): Missing '}'. Fix any mentioned problems and try again.

In the actual shellcheck output, the error numbers are linked to useful explanatory text, which you might want to consult.

  •  Tags:  
  • bash
  • Related