У меня есть один быстрый вопрос.
Это нормально, что bash (я использую 4.4.11) не отображает строки / текст, который отделен / заканчивается простым \r
?
Я был немного удивлен, увидев такое поведение:
$ a=$(printf "hello\ragain\rgeorge\r\n")
$ echo "$a"
george
Но текст «Привет снова» все еще там, как-то «спрятан»:
$ 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
И как только мы просто поиграем с bash, это нормально ... Но разве это потенциальный риск для безопасности? Что если содержимое переменной «а» пришло из внешнего мира и содержит «плохие команды», а не просто привет?
Еще один тест, немного ненадежный на этот раз:
$ 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>
Вообразите скрытое rm
вместо скрытого ls
.
То же поведение при использовании echo -e:
$ a=$(echo -e "ls;\rGeorge\r\n"); echo "$a"
George
Это я что-то не так делаю ...?