Ho una domanda veloce.
È normale che bash (sto usando il 4.4.11) non stia visualizzando righe / testo che sono separati / terminano con il semplice \r
?
Sono stato un po 'sorpreso di vedere questo comportamento:
$ a=$(printf "hello\ragain\rgeorge\r\n")
$ echo "$a"
george
Ma il testo "ciao di nuovo" è ancora lì, in qualche modo "nascosto":
$ echo "$a" |od -w32 -t x1c
0000000 68 65 6c 6c 6f 0d 61 67 61 69 6e 0d 67 65 6f 72 67 65 0d 0a
h e l l o \r a g a i n \r g e o r g e \r \n
E appena giochiamo con bash va bene ... Ma è un potenziale rischio per la sicurezza? Cosa succede se i contenuti della variabile "a" provengono da un mondo esterno e includono "comandi errati" invece che solo ciao?
Un altro test, un po 'incerto questa volta:
$ a=$(printf "ls;\rGeorge\n")
$ echo "$a"
George
$ eval "$a"
0 awkprof.out event-tester.log helloworld.c oneshot.sh rightclick-tester.py tmp uinput-simple.py
<directory listing appears with an error message at the end for command George>
Immagina un nascosto rm
anziché un nascosto ls
.
Stesso comportamento quando si utilizza echo -e:
$ a=$(echo -e "ls;\rGeorge\r\n"); echo "$a"
George
Sono io che faccio qualcosa di sbagliato ...?