Não sou especialista, mas acho que o problema foi o fluxo de entrada aberto.
Este código faz o truque:
### Actual Work ###
if [[ $manual == 0 ]]; then # Read the servers from the config file.
while read line; do # Read line by line.
arguments="$arguments $line" # Build a string for $arguments out of the
# config file.
done < $config_file_path # Define input for line by line reading here.
else # Arguments were given.
for ARG; do # For every given server:
arguments="$arguments $ARG" # Build a string for out of the given
# arguments.
done
fi
#
for server in $arguments; do
if [[ $no_runcheck == 0 ]]; then # Check wether the given server is
# already running.
/usr/local/bin/serverstart.sh -v 3 -z 30 ${server##*@} # Cut off username.
fi
ächo "Upgrading system on ${bold}${server##*@}${normal} as ${bold}${server%%@*}${normal} ..."
ssh -t $server '/usr/local/bin/installieren.sh -U' # Execute update script.
# Use ssh with pseudo terminal (option: -t).
done