Ho riscontrato questo interessante problema popolando la mia barra WM con il testo informativo, che viene applicato impostando il titolo della finestra principale, ovvero xsetroot -name "clever words"
A tal fine, stampare una fortuna funziona benissimo in un terminale:
fortune -s | while read -r; do xsetroot -name "$REPLY"; done
Eppure lo stesso fallisce quando viene eseguito da uno script di shell:
#!/bin/sh
cat /tmp/afile | while read; do echo "$REPLY"; done
produce:
$ sh afilereader
afilereader: 2: leggi: arg count
Naturalmente questo viene risolto assegnando il nostro risultato di fortuna a una variabile, quindi usando xsetroot con detta variabile. Ma vorrei ancora capire perché questo non funziona in una sceneggiatura.
Mi rendo conto che ogni comando su entrambi i lati della pipeline viene eseguito all'interno della propria subshell, ma non riesco a vedere come le loro variabili localizzate potrebbero influenzare il ciclo while read. Oppure le variabili non rientrano nell'ambito di applicazione anche tra le iterazioni del ciclo?
Cosa mi sto perdendo?
Aggiornamento: l' sh
ho usato è collegato al trattino, che è in procinto di rendere POSIX conforme. Utilizzando il più venerabile bash
risolto questo.
read
sia invocabile senza una variabile: pubs.opengroup.org/onlinepubs/9699919799/utilities/read.html