Em logtemps.sh , utilizo $(<file) para ler o conteúdo de file em uma variável. Este é um recurso do bash , no entanto, o cron executa comandos com sh . Para resolver isso, altere a linha em crontab para
*/2 * * * * bash /home/pi/temp-cron/logtemps.sh >> /home/pi/temp-cron/temps.txt 2>&1
(adicionado bash )
ou adicione #!/bin/bash ao topo do script para que ele sempre seja executado sob bash .
Veja benefício 4) da atualização para a versão 8 do Unix, onde o #! foi introduzido.
TLDR; O Cron é executado sob sh , o script usa os comandos bash -only, sempre shebang.