I have a shell script that works on Ubuntu and provides me an output as I desire. When I test the same on a slackware linux version, my script fails.
The script fails at:
dialog --title "Test" --gauge "Copying file." 6 100 < <(
rsync -a --progress test.tar.gz /media/sda1 |
unbuffer -p grep -o "[0-9]*%" |
unbuffer -p cut -f1 -d '%'
)
The error is:
Syntax error near unexpected token `<'
What could be different between the two operating systems that the script fails to execute?
The script executes successfully if I get rid of the dialog command and the brackets etc.
[Update below]
The
< <( ... )notation is unique forbashandzsh. The syntax error is a clear sign it is not recognised by the slackware shell.Either slackware does not use bash, or its version of bash is too old for this feature.
Check the value of $BASH_VERSION on both platforms.
A possible alternative for
could be:
This will work in bash, ksh93, and zsh, and has been around slightly longer.
UPDATE
Based on your feedback, I’ve looked at the actual pipeline you try to use here.
I believe it’s your intention to use column 3 of the
--progressoutput as input for the dialog graphical progress indicator.I tried this with a directory with lots of small files. Are you aware that this percentage indicator is per file? With my small files, rsync gave only one update per file. As every single file was written in one go, all percentages were equal to
100%.