Вам нужно сделать
while IFS= read -r line
Установка IFS на пустую строку сохранит пробелы.
Использование -r
сохранит все последовательности обратной косой черты в тексте.
Если вас беспокоит производительность, имейте в виду, что while read
цикл в bash очень медленный. Если вы хотите разбить ввод на строки и потребление памяти не является проблемой, прочитайте ввод в массив строк:
mapfile -t lines < x.tmp
for line in "${lines[@]}"; do
do_something_with "$line"
done
Одно простое решение, хотя и не обязательно лучшее:
sshpass -p passwd ssh dennis@ip "(./.bashrc;python xx.py)"
Это должно сработать.