मेरा एक त्वरित प्रश्न है।
क्या यह सामान्य है कि बैश (मैं 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
और जैसे ही हम बस बैश के साथ खेलते हैं ठीक है .... लेकिन क्या यह एक संभावित सुरक्षा जोखिम है? क्या होगा अगर चर की सामग्री "एक" बाहरी दुनिया से आती है और इसमें केवल हेलो के बजाय "खराब कमांड" शामिल हैं?
एक और परीक्षा, इस बार थोड़ा असुरक्षित:
$ 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
।
इको-ई का उपयोग करते समय समान व्यवहार:
$ a=$(echo -e "ls;\rGeorge\r\n"); echo "$a"
George
क्या यह मैं हूँ जो कुछ गलत करता है ...?