'Ls' හදිසියේම තනි උපුටා දැක්වීම්වල ඇති ඉඩ සහිත අයිතම ඔතා ඇත්තේ ඇයි?


208

මගේ එක් යන්ත්‍රයක (ඩේබියන් සිද් ධාවනය වන) මම 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
}

20
lsවිධානය විග්‍රහ නොකිරීමට තවත් හේතුවක් .
ජිම්මිජ්

12
එය අමුතු පෙනුමක් ඇති නමුත් එය සක්‍රීය කර ඇත්තේ පර්යන්තයකට මුද්‍රණය කිරීමේදී පමණක් නම් එය අර්ථවත් කරයි. ඔබට 'ටෙස්ට්' ගොනුවක් වෙනුවට 'ටෙස්ට් 1. ටෙක්ස්ට්' ගොනුවක් සහ තවත් 'ටෙක්ස්ට්' එකක් ඇති බව ඔබට පැහැදිලිව දැකගත හැකිය. උත්සාහ ls | catකර එය පහව යන්නේ දැයි බලන්න. මා සතුව කාල යන්ත්‍රයක් තිබේ නම්, මම නැවත බෙල් ලැබ්ස් ~ 1970 වෙත ගොස් කෙන් තොම්සන්ට ඒත්තු ගැන්වීමට උත්සාහ කරන්නේ ලිපිගොනු සහ නාමාවලි නාමවල ඉඩ ලබා දීම නරක අදහසක් බවයි. :-P
Bjorn Munch

6
මම මෙය මුලින්ම දුටු විට, මගේ එක් ස්ක්‍රිප්ට් එකක් අවුල් වී ඇති බව සිතමින් මම බියට පත් වී මගේ සියලුම ලිපිගොනු නැවත නම් කළෙමි '*'. එයින් lsමිදීම සඳහා මගේ සියලුම යන්ත්‍රවලට අන්වර්ථ නාම එකතු කිරීමට මම සිතමි ...
සීමිත සමාව සඳහා

15
Le ලීමන්ස්ටයින් විසින් පෙන්වා දුන් පරිදි, සීමිත ඇටෝනමන්ට් , ඔබට QUOTING_STYLE=literalමෙය අන්වර්ථයකට වඩා පරිසර විචල්‍යයකින් කළ හැකිය . (මම හිතන්නේ එය රසයේ කාරණයක්, නමුත් මම විචල්‍යයට කැමතියි.)
LSpice

4
JBjornMunch එය එක් ගොනුවක් හෝ දෙකක් දැයි පැවසීමේ ගැටලුවට විසඳුම් දෙකක් තිබේ: 1) තීරු අඳින්නේ කෙසේදැයි සොයා බලන්න, එය තරමක් පැහැදිලිය. 2) පේළියකට එක් අයිතමයක් ලැයිස්තුගත කරන්න. මේ දෙකම තනි උපුටා දැක්වීම් සහිත මැන්ග්ලිං වලට වඩා හොඳ සහ පැහැදිලි ය.
Wyatt8740

Answers:


140

ප න : එය ඉතා මෙවැනි පිළිතුරක් upvote හා දිනකට එය අමතන්න තෘප්තිමත් කිරීමට ඉඩ ඇති අතර, කරුණාකර GNU coreutils නඩත්තුකරන්නන් SO පිළිතුර ඡන්ද ගැන සැලකිලිමත් නැහැ, සහ ඒ බව සහතික කළ ඇත්ත වශයෙන්ම ඔබ අවශ්ය නම් ඔවුන් දිරිමත් කිරීම සඳහා වෙනස් , ඔබ මෙම පිළිතුර විස්තර කරන පරිදි ඔවුන්ට විද්‍යුත් තැපැල් කිරීමට අවශ්‍යය .


යාවත්කාලීන කිරීම 2019 :
පසුගිය වසරේ යම් කාලයකදී නඩත්තු කරන්නන් දෙගුණයකින් අඩු වී ඇති අතර දැන් මෙම ගැටළුව පිළිබඳ ඕනෑම දෝෂයක් වාර්තා කරයි . ඔවුන්ගේ වෙබ් අඩවියේ ලැයිස්තුගත කර ඇති ඇදහිය නොහැකි තරම් දිගු පිටුවකට යොමු කරන බොයිලේරු ප්‍රතිචාරයක් පමණි. ඔවුන් නොසලකා හැරීමට කැපවී සිටිති .
Bug-coreutils@gnu.org වාර්තා වල නොනවතින පීඩනය පැහැදිලිවම බලපෑමක් ඇති කර ඇති අතර, මෙම දැවැන්ත හා විකාර පිටුව උත්පාදනය කිරීමට බල කෙරී ඇති අතර ගැටළුව සමඟ කටයුතු කිරීමට කැමති නඩත්තුකරුවන්ගේ සංඛ්‍යාව එක් අයෙකුට පමණක් අඩු කළ හැකිය.
මේ බොහෝ අය යම් දෙයක් දෝෂයක් ලෙස සලකන විට, එය නඩත්තු කරන්නන් එකඟ නොවුනත් නැත. වෙනස් කිරීම දිරිගැන්වීමේ සරලම ක්‍රමය ලෙස ඔවුන්ට
දිගටම විද්‍යුත් තැපැල් කිරීම.


" ඇයි මේක වෙන්නේ? "

දශක ගණනාවක තථ්‍ය ප්‍රමිතීන්ට වඩා තමන් දන්නා බව කොරූටිල්ස් නඩත්තු කරන්නන් කිහිප දෙනෙක් තීරණය කළහ.


" මම එය නිසි ලෙස නතර කරන්නේ කෙසේද? "

http://www.gnu.org/software/coreutils/coreutils.html :

දෝෂ වාර්තා

ඔබ Coreutils හි දෝෂයක් සොයාගෙන ඇතැයි සිතන්නේ නම්, කරුණාකර හැකි තරම් සම්පූර්ණ දෝෂ වාර්තාවක් <bug-coreutils@gnu.org> වෙත යවන්න , එය ස්වයංක්‍රීයව Coreutils දෝෂ ට්රැකර් වෙත ඇතුලත් වේ. දෝෂ වාර්තා කිරීමට පෙර කරුණාකර නිතර අසන පැන කියවන්න. දෝෂ වාර්තා ලිවිය යුතු ආකාරය සහ හොඳ ප්‍රශ්න අසන්නේ කෙසේද යන්න පිළිබඳ ඉතා ප්‍රයෝජනවත් හා බොහෝ විට යොමු කරන ලද මාර්ගෝපදේශය නම් ස්මාර්ට් මාර්ගය ප්‍රශ්න අසන්නේ කෙසේද යන්නයි. ඔබට පෙර පළ කිරීම් පිරික්සීමට සහ දෝෂ-කොරුටිල්ස් ලේඛනාගාරය සෙවිය හැකිය.

 මෙම වෙනස දැනටමත් ආපසු හරවා ඇති ඩිස්ට්‍රෝස් :

ඩිස්ට්‍රෝස් බලපෑමට ලක් නොවූ:

  • openSUSE (දැනටමත් භාවිතා කර ඇත -N)

" නැවත සකස් කිරීමකින් තොරව මෙය නිවැරදි කිරීමට ක්‍රමයක් තිබේද? "

යෝජනා කරන්නන් ඔබට ...

ඔවුන්ගේ අන්වර්ථයට -N එකතු කිරීමෙන් පැරණි ආකෘතියට ආපසු යන්න

… ඔබගේ සියලු ස්ථාපනයන්හි, සෑම තැනකම, ඉතිරි සදාකාලිකත්වය සඳහා.


18
මෙම වෙනස තැපැල් ලැයිස්තුවේ යෝජනා කරන ලද අතර ශුද්ධ ප්‍රතිලාභයක් ලෙස කොරූටිල්ස් නඩත්තුකරුවන් තිදෙනෙකු එකඟ විය. අපි මේ පිළිබඳව const ලදායී තර්ක සඳහා සම්පූර්ණයෙන්ම විවෘතව සිටිමු. සියල්ලට පසු මෙය විවෘත මූලාශ්‍රයකි, අපි නියෝග කිරීමට අදහස් නොකරමු, දේවල් වැඩිදියුණු කිරීමට පමණි. ලැයිස්තුගත කර ඇති නූල් පොතේ ප්‍රතිචාර දැක්වීමට කරුණාකර නිදහස් වන්න . පෙළගැස්ම වැඩි දියුණු කිරීම සඳහා ඉඩක් එක් කිරීමෙන්)
පෙඩ්‍රේග් බ්‍රැඩි

38
@ PádraigBrady යාවත්කාලීන කළ පිළිතුර. ඔබේ හරය නූල් වල ප්‍රතික්ෂේප කිරීම් රාශියක් දැකීම. අවසාන කරුණ නම් ඔබ මිනිසුන් සඳහා වැඩි වැඩ කොටසක් නිර්මාණය කරන අතර ඔබ එය කරන්නේ 1970 සිට මෙහෙයුම් පද්ධතියක ක්ලෝනයක් වන මෙහෙයුම් පද්ධතියක නාමයෙන් ය. මිනිසුන්ට වෙනස් දෙයක් අවශ්‍ය නම් ඔවුන් එයට පිවිසෙනු ඇත.
ජෑන් කියු පෙබ්ලික්

48
@ PádraigBrady මෙම වෙනස නිසා මා කෝපයට පත් වී ඇති අතර එයට හේතුව සහ විසඳුම සොයා ගැනීමට පැය කිහිපයක් නාස්ති කර ඇත. මම නිෂේධාත්මක යැයි අදහස් නොකෙරේ - මම වෙනත් පුද්ගලයින්ගේ අදහස් බෙදා ගන්නෙමි! මූලික හැසිරීම වෙනස් කිරීමෙන් විශාල ඇඟවුම් ඇත ..
mafrosis

60
අවුරුදු 30 ක් තිස්සේ * නික්ස් පද්ධති භාවිතා කළ අයෙකු ලෙස, මේ වගේ අනවශ්‍ය වෙනස්කම් තරමක් කරදරකාරී බව මට පෙනේ. ඔවුන් දිගුකාලීන ස්ක්‍රිප්ට් බිඳ දමයි, එක් දෙයක් සඳහා. අවම විශ්මය ජනක මූලධර්මය ද උල්ලං late නය කරයි. ඉහත සඳහන් කළ පරිදි "තේරීම" මෙහි පෙරනිමිය විය යුතුය.
බ්‍රයන් ක්ලැපර්

32
@ PádraigBrady එවැනි වෙනස්කම් ඇති කිරීමට තවමත් එය නොවේ. එය කර ඇති කියලා මාර්ගය පෙරනිමියෙන් බව හැසිරීම ස්ව-වෙනුවට ක්රියාකාරී ඇති තවත් සාධනීය. ලිපිගොනු නාම ගබඩා කරන්නේ කෙසේද යන්නත් එය ව්‍යාජ ලෙස ඉඟි කරයි, කෙටියෙන් කිවහොත් lsඔබ තවදුරටත් නොදකින දේ එය ගබඩා වන්නේ කෙසේද යන්නයි. එම අංගය පෙරනිමි නොව විකල්ප විය යුතුය .

104

ඔබට උපුටා දැක්වීමේ විලාසය තෝරා ගත හැකිය :

ls --quoting-style=literal

සමාන:

ls -N

හෝ:

QUOTING_STYLE=literal ls

එය අන්වර්ථ හෝ කට්ටලයක් කරන්න export QUOTING_STYLE=literalඔබගේ .bashrcපෙර-8.25 හැසිරීම සාක්ෂාත් කර ගැනීම.


15
සාමාන්‍ය යුනික්ස්-වයි හැසිරීම ලබා ගැනීම සඳහා මට එය කළ යුතුව ඇත්තේ ටිකක් අමුතු දෙයක් ලෙස පෙනේ. එසේම, මට පැරණි පෙරනිමිය අවශ්යයි. පැන යාම පැරණි පෙරනිමිය යැයි මම නොසිතමි - එය ඇත්ත වශයෙන්ම එහි තිබූ දේම මුද්‍රණය කර ඇතැයි මම සිතමි.
Wyatt8740

10
8.25 ට පෙර හැසිරීම සඳහා, export QUOTING_STYLE=literalඔබේ bashrc හි භාවිතා කරන්න.
ලෙකන්ස්ටයින්

3
හෝ භාවිතා -Nකරන බව පෙනේ. මම දැනටමත් පුද්ගලික ගබඩාවක් සකසා ඇති බැවින් මම මගේම අනුවාදයක් සම්පාදනය කරමි.
Wyatt8740

2
@LSpice මම literalඒ වෙනුවට භාවිතා කිරීම සඳහා පෝස්ට් සංස්කරණය කර ඇත escape(මම විශ්වාස කරන්නේ @cuonglm හට අවශ්‍ය වූයේ ශෛලිය වෙනස් කරන්නේ කෙසේද යන්න පෙන්වීමට මිස විශේෂයෙන් escapeශෛලිය ඉලක්ක කර නොගෙන ).
ලෙකන්ස්ටයින්

7
මෙම පිළිතුර තවත් ඉහළ නැංවිය යුතුය. නිලධාරිවාදී පිළිතුරක් මග හැරීමෙන් ප්‍රශ්න කරන්නා ඇසූ දෙයට එය කෙලින්ම ආමන්ත්‍රණය කරයි. ඇත්ත වශයෙන්ම, පරිසර විචල්ය ප්රවේශය ඉතා අලංකාර ලෙස පෙනේ. .
මාර්සෙලෝ

47

වෙනස ගැන කරුණු කිහිපයක්.

  • එය coreutils v8.25 හි හඳුන්වා දුන් අතර පෙළගැස්ම v8.26 හි වැඩි දියුණු විය
  • එය සිදුවන්නේ ටර්මිනල් වෙත ප්‍රතිදානය කරන විට පමණි
  • එය අවකාශය අඩංගු ලිපිගොනු සඳහා පරිශීලකයින් සඳහා ප්‍රතිදානය අවලංගු කරයි
  • එය ප්‍රතිදානය සනීපාරක්ෂාව කරන බැවින් පිටපත් කිරීම හා ඇලවීම ආරක්ෂිත වේ
  • ප්‍රතිදානය දැන් සෑම විටම වලංගු වන්නේ පිටපත් කර නැවත ෂෙල් එකට ඇලවීම සඳහා ය
  • පරිශීලකයින්ට ඔවුන්ගේ අන්වර්ථ නාමයට -N එකතු කිරීමෙන් පැරණි ආකෘතියට ආපසු යා හැකිය

8
මගේ අවසාන උදාහරණය අපැහැදිලි නොවේ ද? සමහර විට නැත - නමුත් එය නිසැකවම අවුල් සහගත වන අතර තේරුම් ගැනීමට වැඩි කාලයක් ගතවේ. මම හිතන්නේ එය භයානක වෙනසක් (ඔබට වරදක් නැත). අන්වර්ථ ඔත්තුවට ස්තූතියි.
Wyatt8740

28
සටහන: මෙම වෙනස කොරුටිල්ස් 8.25 හි හඳුන්වා දී ඇත ( කැපවීම , මෙම තනතුරට සමාන පෙඩ්රිග් විසින් රචිත). පුද්ගලිකව මම සිතන්නේ මෙම හැසිරීම උපපෝෂිත බවයි, ගොනු නාමයක අවකාශයක් ඇති වූ විට එය පෙළගැස්ම බිඳ දමයි.
ලෙකන්ස්ටයින්

12
මගේ සමාව - පෙනෙන විදිහට ඔබ අවම වශයෙන් ෂෙල්-උපුටා දැක්වීම් ආරක්ෂිතව උපුටා දක්වයි. මම තවමත් එයට කැමති නැහැ. විකල්පයන් හොඳයි - නමුත් දශක ගණනක් පැරණි යුනික්ස් කෝර් උපයෝගීතාවයේ ඉතා හොඳින් පෙරනිමි හැසිරීම වෙනස් කිරීම එහි නිරවද්‍යතාවය අඩු කරන අයුරින් වෙනස් කිරීම නරක අදහසක් විය හැකිය.
mikeserv

14
@ PádraigBrady ඉතින්, ඔබ දිගටම lsකැඩී යයිද? ඔබේ වෙනසට එරෙහි සියලු තර්ක දෙස බලන්න. කිසිවෙකුට එය අවශ්‍ය නැත. සමහර විට ලෝකයෙන් සමාව අයැදීමට හා එය අහෝසි කිරීමට කාලයයි.
ක්‍රිස් වරික්

8
@ PádraigBrady ඉතින් මෙය වැරදියි, කැඩී ඇත්තේ කෙසේද යන්න පැහැදිලි කර ඇති බොහෝ අය තිබියදීත්, පෙරනිමිය නොවෙනස්ව පවතින පරිදි ඔබ තවමත් මෙය ආපසු හරවන්නේ නැද්ද? ඔබේ විශ්වාසයට පටහැනිව, මෙම වෙනස අවුල් සහගත නොවේ . මිනිසුන් පරිසර විචල්‍යයක් හෝ අන්වර්ථයක් සැකසීමට යෝජනා කිරීම අසයිනින් වේ.
මාර්ක්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.