Allora in sostanza vuoi salvare in una variabile l'output del comando AT+CMGL=ALL dopo che hai avviato il programma? L'idea di usare un file è giusta. Innanzitutto avvia il programma redirigendo l'output su un file in questo modo:
dove al posto di file.txt puoi metterci il nome che preferisci, anche senza estensione (se il file non esiste, viene creato in automatico).codice:cu -s 9600 -l /dev/ttyS0 1> file.txt
A questo punto, tutti gli output del programma andranno scritti non su stdout (la console) ma sul file. Quindi se, una volta avviato il programma, dai quel comando AT+CMGL=ALL, l'output sarà scritto su file.txt, e a quel punto se vuoi salvarlo in una variabile ti basta dare
variabile=`cat file.txt`
Altre soluzioni non mi vengono in mente, ammesso che io abbia compreso il problema.