මගේ එක් යන්ත්රයක (ඩේබියන් සිද් ධාවනය වන) මම ls
ඕනෑම ලිපිගොනු නාමයක් හිස් අවකාශයක් සහිතව ටයිප් කරන සෑම විටම ඒ වටා තනි උපුටා දැක්වීම් ඇති බව මම දුටුවෙමි .
මම වහාම මගේ අන්වර්ථ නාම පරීක්ෂා කර බැලුවෙමි.
wyatt@debian630:~/testdir$ ls
'test 1.txt' test1.txt
wyatt@debian630:~/testdir$ alias
alias ls='ls --color=auto'
alias wget='wget --content-disposition'
wyatt@debian630:~/testdir$
තවත් පරීක්ෂණයක්, ඒවායේ නම් වලින් තනි උපුටා දැක්වීම් අඩංගු ලිපිගොනු (ජිම්මිජ්ගේ ඉල්ලීමකට පිළිතුරු ද):
wyatt@debian630:~/testdir$ ls
'test 1.txt' test1.txt 'thishasasinglequotehere'\''.txt'
wyatt@debian630:~/testdir$ touch "'test 1.txt'"
wyatt@debian630:~/testdir$ ls
''\''test 1.txt'\''' test1.txt
'test 1.txt' 'thishasasinglequotehere'\''.txt'
නව coreutils-8.26 ප්රතිදානය සමඟ යාවත්කාලීන කරන්න (එය පිළිගත හැකි තරම් අවුල් සහගත නමුත් පෙරනිමියෙන් තවමත් කෝපයට පත් වේ). මෙම මුද්රණය සඳහා පෙඩ්රේග් බ්රැඩිට ස්තූතියි:
$ ls
"'test 1.txt'" test1.txt
'test 1.txt' "thishasasinglequotehere'.txt"
$ ls -N
'test 1.txt' test1.txt
test 1.txt thishasasinglequotehere'.txt
මෙය සිදුවන්නේ ඇයි? එය නිසි ලෙස නතර කරන්නේ කෙසේද?
පැහැදිලි කිරීම සඳහා, මම ස්වයංක්රීයව වර්ණ ප්රතිදානය සඳහා ls සකසා ගතිමි. එය කිසි විටෙකත් දේවල් වටා උපුටා දැක්වීම් කර නැත.
මම දුවනවා bash
සහ කොරුටිල්ස් 8.25.
සංස්කරණය: මෙම coreutils සංවර්ධකයින් කල්පනා පෙනී (සබැඳිය) එය බරපතළ තිබියදීත් ගෝලීය පැහැර හැරීමක් සිදු කිරීම හොඳ අදහසක් විය හැකිය අවම වශයෙන් පුදුමයට මූලධර්මය යුනික්ස් සම්ප්රදාය වසර 46+ මෙන්ම.
නැවත සකස් කිරීමකින් තොරව මෙය නිවැරදි කිරීමට ක්රමයක් තිබේද?
යාවත්කාලීන කිරීම - 2017 ඔක්තෝබර් - ඩෙබියන් සිද් විසින් පෙරනිමියෙන් ෂෙල් ගැලවීමේ උපුටා දැක්වීම නැවත සක්රීය කර ඇත. මෙය හාස්යයට කරුණකි. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=877582
පෙර දෝෂ වාර්තාවට පිළිතුරු දාමයේ පතුලේ, "වෙනස හිතාමතාම සිදු වූ අතර එය පවතිනු ඇත." https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813164#226
මම හිතුවා මේක සමථයකට පත්වුණා කියලා. පෙනෙන විදිහට නැහැ.
යාවත්කාලීන කිරීම: 2019 අප්රියෙල්: මෙම වෙනස නිසා ඇති වූ ව්යාජ දෝෂ වාර්තාවක් PHP හි හමු විය ls
. ඔබ සංවර්ධකයින් ව්යාකූල කරන විට සහ ව්යාජ දෝෂ වාර්තා ජනනය කරන විට, ඔබගේ වෙනස්කම් නැවත සිතා බැලීමට කාලයයි.
යාවත්කාලීන කිරීම: ඇන්ඩ්රොයිඩ් ටොයිබොක්ස් ls
දැන් මේ හා සමාන දෙයක් කරන නමුත් උපුටා දැක්වීම් වෙනුවට බැක්ස්ලෑෂ් භාවිතා කරයි. -Q විකල්පය භාවිතා කිරීමෙන් අවකාශය 'ප්රශ්න සලකුණු අක්ෂර' ලෙස විදහා දක්වයි (ඒවා මොනවාදැයි මම පරීක්ෂා කර නැත, ඒවා පැහැදිලිවම අවකාශයන් නොවන බැවින්), එබැවින් උපාංගය මුල් බැස නොගෙන මා මෙතෙක් සොයාගෙන ඇති එකම විසඳුම එකතු කිරීමයි. මෙය ස්ක්රිප්ට් එකකට ගෙන ෂෙල් එකක් දියත් කිරීමේදී එය ප්රභව කරන්න. මෙම ශ්රිතය ls
ටර්මිනලයක නම් තීරු භාවිතා කරන අතර වෙනත් පේළියකට එක මුද්රණය ls
කරයි.
ls() {
# only way I can stop ls from escaping with backslashes
if [ -t 1 ]; then
/system/bin/ls -C $@ |cat
else
/system/bin/ls $@ |cat
fi
}
ls | cat
කර එය පහව යන්නේ දැයි බලන්න. මා සතුව කාල යන්ත්රයක් තිබේ නම්, මම නැවත බෙල් ලැබ්ස් ~ 1970 වෙත ගොස් කෙන් තොම්සන්ට ඒත්තු ගැන්වීමට උත්සාහ කරන්නේ ලිපිගොනු සහ නාමාවලි නාමවල ඉඩ ලබා දීම නරක අදහසක් බවයි. :-P
'*'
. එයින් ls
මිදීම සඳහා මගේ සියලුම යන්ත්රවලට අන්වර්ථ නාම එකතු කිරීමට මම සිතමි ...
QUOTING_STYLE=literal
මෙය අන්වර්ථයකට වඩා පරිසර විචල්යයකින් කළ හැකිය . (මම හිතන්නේ එය රසයේ කාරණයක්, නමුත් මම විචල්යයට කැමතියි.)
ls
විධානය විග්රහ නොකිරීමට තවත් හේතුවක් .