Mam jedno szybkie pytanie.
Czy to normalne, że bash (używam 4.4.11) nie wyświetla linii / tekstu oddzielonego / zakończonego zwykłym \r
?
Byłem trochę zaskoczony tym zachowaniem:
$ a=$(printf "hello\ragain\rgeorge\r\n")
$ echo "$a"
george
Ale tekst „witaj ponownie” wciąż tam jest, w jakiś sposób „ukryty”:
$ 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
A gdy tylko gramy w bash, wszystko jest w porządku .... Ale czy to potencjalne zagrożenie bezpieczeństwa? Co jeśli zawartość zmiennej „a” pochodzi ze świata zewnętrznego i zawiera „złe polecenia” zamiast po prostu cześć?
Kolejny test, tym razem trochę niepewny:
$ 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>
Wyobraź sobie ukryty rm
zamiast ukrytego ls
.
To samo zachowanie przy użyciu echa -e:
$ a=$(echo -e "ls;\rGeorge\r\n"); echo "$a"
George
Czy to ja robi coś złego ...?