Quando você usa source , é o shell atual que lê o arquivo, não o shell mencionado na linha #! . E suponho que seu shell seja zsh ou ksh93 , que usa read -p para ler de um co-processo.
Um exemplo disso em ksh93 :
cat /etc/passwd |&
while IFS=":" read -p user rest; do
printf 'There is a user called %s\n' "$user"
done
Para executar o seu script, mencione explicitamente o interpretador:
$ bash script.sh
... ou torne o script executável e execute-o:
$ chmod +x script.sh
$ ./script.sh
Para obter read para usar um prompt personalizado em zsh e ksh93 :
read username"?What's you name? "
printf 'Hello %s!\n' "$username"