কেন 'ls' হঠাৎ একক উদ্ধৃতিতে ফাঁকা আইটেম মোড়ানো হয়?


187

আমি কেবল লক্ষ্য করেছি যে আমার কোনও মেশিনে (দেবিয়ান সিড চালানো) যখনই 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'

(ছবি)

নতুন কোর্টিলস -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।

সম্পাদনা: কোরিউটিলস বিকাশকারীদের মনে হয়েছে (লিঙ্ক) এটি হওয়া ভাল ধারণা হবে যে সর্বনিম্ন বিস্ময়ের নীতির পাশাপাশি ইউনিক্স traditionতিহ্যের 46+ বছরের নীতি ভঙ্গ করেও বিশ্বব্যাপী খেলাপি ।

কোনও পুনরায় সংশোধন না করে এটি ঠিক করার কোনও উপায়?


আপডেট - অক্টোবর 2017 - ডিবিয়ান সিড ডিফল্টরূপে শেল পলায়নের উদ্ধৃতি পুনরায় সক্ষম করেছে। এটি কেবল হাস্যকর হয়ে উঠছে। https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=877582

এবং পূর্ববর্তী বাগ প্রতিবেদনের জবাব চেইনের নীচে, "পরিবর্তনটি উদ্দেশ্যমূলক ছিল এবং থাকবেই।" https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813164#226

আমি ভেবেছিলাম এটি নিষ্পত্তি হয়েছে। দৃশ্যত না.

আপডেট: এপ্রিল 2019: সবেমাত্র পিএইচপি-তে একটি দৃষ্টিনন্দন বাগ রিপোর্ট পাওয়া গেছে যা এই পরিবর্তনের ফলে ঘটেছিল ls। আপনি যখন বিকাশকারীদের বিভ্রান্ত করছেন এবং ভুয়া বাগ রিপোর্ট উত্পন্ন করছেন, তখন আপনার পরিবর্তনগুলি পুনরায় চিন্তা করার সময় এসেছে।

আপডেট: অ্যান্ড্রয়েড টয়বক্স lsএখন কোটের পরিবর্তে ব্যাকস্ল্যাশ সহ এর সাথে কিছু করছে। -Q বিকল্পটি ব্যবহার করে স্পেসগুলিকে 'প্রশ্ন চিহ্নের অক্ষর' হিসাবে রেন্ডার করে তোলে (তারা কী তা আমি খতিয়ে দেখিনি, যেহেতু তারা স্পষ্টত স্পেস নয়), সুতরাং ডিভাইসটিকে প্রশ্নবিদ্ধ রুটি না করেই আমি এখনও খুঁজে পেলাম একমাত্র ফিক্স যুক্ত করা add এটি কোনও স্ক্রিপ্টে তৈরি করুন এবং শেল চালু করার সময় এটি উত্স করুন। এই ফাংশনটি 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.txt' রয়েছে এবং অন্য একটি '1.txt' রয়েছে। চেষ্টা করুন ls | catএবং দেখুন এটি চলে যায় কিনা। আমার যদি টাইম মেশিন থাকে তবে আমি বেল ল্যাবস ~ ১৯ .০ এ ফিরে গিয়ে কেন থম্পসনকে বোঝানোর চেষ্টা করতাম যে ফাইল এবং ডিরেক্টরিগুলির নাম স্থান দেওয়ার অনুমতি দেওয়া একটি খারাপ ধারণা। :
বজর্ন মাঞ্চ

6
আমি যখন এটি প্রথম দেখলাম, তখন আমার মনে হয় যে আমার একটি স্ক্রিপ্ট খারাপ হয়ে গেছে এবং আমার সমস্ত ফাইলের নাম পরিবর্তন করে '*'। আমি মনে করি আমি lsএগুলি থেকে মুক্তি পেতে আমার সমস্ত মেশিনে উপকরণ যুক্ত করার চেষ্টা করব ...
সীমিত প্রায়শ্চিত্ত

14
@ লিমিটেড অ্যাটোনমেন্ট, যেমন লেকেনস্টেইন দ্বারা নির্দেশিত , আপনি এটি একটি উপাধারQUOTING_STYLE=literal পরিবর্তে পরিবেশের পরিবর্তনশীল সাথে করতে পারেন । (আমি অনুমান করি এটি স্বাদের বিষয়, তবে আমি পরিবর্তনশীলটিকে পছন্দ করি))
এলস্পাই

4
@ বজর্নমঞ্চে এটি একটি ফাইল বা দুটি: 1) কলামগুলি কীভাবে আঁকছে তা দেখুন এবং এটি মোটামুটি সুস্পষ্ট is 2) প্রতি লাইনে একটি আইটেম তালিকা। যারা উভয়ই একক উদ্ধৃতি সহ ম্যাংলিংয়ের চেয়ে আরও ভাল এবং পরিষ্কার দেখাচ্ছে।
Wyatt8740

উত্তর:


132

উপস্থাপনা : যদিও এটির মতো কোনও উত্তর উপস্থাপন এবং এটি একটি দিন হিসাবে কল করা যথেষ্ট সন্তুষ্ট হতে পারে, তবে দয়া করে নিশ্চিত হন যে জিএনইউ বিকাশকারীরা এসও উত্তর ভোটগুলির বিষয়ে কোন চিন্তা করে না, এবং আপনি যদি তাদের বাস্তবে পরিবর্তন করতে উত্সাহিত করতে চান তবে আপনার প্রয়োজন এই উত্তর বর্ণিত হিসাবে তাদের ইমেল করুন


" কেন এমন হচ্ছে? "

বেশ কয়েকটি কোর্টিলস বিকাশকারী সিদ্ধান্ত নিয়েছেন যে তারা কয়েক দশকের ডি-স্ট্যাক্ট মানগুলির চেয়ে আরও ভাল জানেন।


" আমি কীভাবে এটি সঠিকভাবে বন্ধ করব? "

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

বাগ রিপোর্ট

আপনি যদি মনে করেন যে আপনি কেরুটিলগুলিতে একটি বাগ খুঁজে পেয়েছেন, তবে দয়া করে < বাগ - কোরিউটিলস @gnu.org> এ যত তাড়াতাড়ি সম্ভব একটি ত্রুটি প্রতিবেদনটি প্রেরণ করুন এবং এটি স্বয়ংক্রিয়ভাবে কোরিউটিস বাগ ট্র্যাকারে প্রবেশ করা হবে। বাগ রিপোর্ট করার আগে দয়া করে FAQ পড়ুন। কীভাবে বাগ রিপোর্ট লিখতে হয় এবং ভাল প্রশ্ন জিজ্ঞাসা করা যায় সে সম্পর্কে একটি খুব দরকারী এবং প্রায়শই রেফারেন্সড গাইড হ'ল স্মার্ট ওয়ে কীভাবে প্রশ্ন জিজ্ঞাসা করা যায় তা নথি। আপনি পূর্ববর্তী পোস্টগুলি ব্রাউজ করতে এবং বাগ-কোর্টিল আর্কাইভটি সন্ধান করতে পারেন।

ইতিমধ্যে  এই পরিবর্তনটি আবার ফিরিয়ে নিয়েছে এমন ডিস্ট্রোস :

ডিস্ট্রোস অরক্ষিত:

  • ওপেনসুএস (ইতিমধ্যে ব্যবহৃত -এন)

" পুনরায় সংশোধন না করে এটিকে ঠিক করার কোনও উপায়? "

প্রবক্তারা আপনি ...

পুরানো ফর্ম্যাটে ফিরে আসুন তাদের এলএস নামটিতে -N যোগ করে

… আপনার সমস্ত ইনস্টলগুলিতে, সর্বত্র, অনন্তর অবশিষ্টের জন্য।


17
পরিবর্তনটি মেলিং তালিকায় প্রস্তাবিত হয়েছিল এবং তিনটি কোর্টিল রক্ষণাবেক্ষণকারী তার নেট সুবিধা হিসাবে সম্মত হয়েছিল। আমরা এই সম্পর্কে গঠনমূলক যুক্তিগুলির জন্য সম্পূর্ণ উন্মুক্ত। এটি সর্বোপরি ওপেন সোর্স, আমরা হুকুম বোঝাতে চাই না, কেবল জিনিসগুলির উন্নতি করতে। List.gnu.org/archive/html/coreutils/2016-02/msg00000.html ( বিটিডব্লিউ উপায়, এখানে উল্লিখিত একটি নান্দনিক অসুবিধাগুলির উন্নতি করার জন্য গঠনমূলক পরামর্শ ছিল দয়া করে বিনা দ্বিধায় দয়া করে , প্রান্তিককরণের উন্নতি করার জন্য একটি স্থান যুক্ত করে)
প্যাড্র্যাগ ব্র্যাডি

31
@ পেডারিগ ব্র্যাডি আপডেট উত্তর। যদিও আপনার কোরিউটিলস থ্রেডে অস্বীকারের বোঝা দেখা যাচ্ছে। তল লাইনটি হ'ল আপনি লোকদের জন্য আরও কাজ তৈরি করছেন এবং আপনি এটি কোনও ওএসের নামে এটি করছেন যা একটি ওএসের ক্লোন যা ১৯.০ সাল থেকে।
জানু কিউ পেবলিক

43
@ পেদারিগ ব্র্যাডি এই পরিবর্তনটি আমাকে বিরক্ত করেছে এবং কারণ এবং সমাধানের সন্ধানের জন্য কয়েক ঘন্টা নষ্ট করেছে। আমি নেতিবাচক হতে চাই না - আমি কেবল অন্য ব্যক্তির দৃষ্টিভঙ্গি ভাগ করছি! মূল আচরণটি পরিবর্তনের বিশাল প্রভাব রয়েছে
has

52
যিনি ৩০ বছরের জন্য * নিক্স সিস্টেম ব্যবহার করেছেন, আমি এইরকম কৃত্রিম পরিবর্তনগুলি বেশ বিরক্তিকর বলে মনে করি। এগুলি একটি জিনিসের জন্য দীর্ঘস্থায়ী স্ক্রিপ্টগুলি ভেঙে দেয়। তারা ন্যূনতম বিস্ময়ের নীতি লঙ্ঘন করে। উপরে উল্লিখিত হিসাবে "অপ্ট-ইন" এখানে ডিফল্ট হওয়া উচিত ছিল।
ব্রায়ান ক্ল্যাপার 0

28
@ পেদ্রাগ ব্র্যাডি এখনও এই ধরনের পরিবর্তনগুলি ঠেকানোর উপায় নয়। ডিফল্টরূপে সক্রিয় হওয়ার পরিবর্তে সেই আচরণটি অপ্ট-ইন করা উপায় আরও গঠনমূলক হতে চাই । এটি ফাইলের নাম কীভাবে সংরক্ষণ করা হয় তাও এটি মিথ্যা ইঙ্গিত দেয়, সংক্ষেপে lsআপনি যা দেখেন না সেটি এটি কীভাবে সংরক্ষণ করা হয়। এই বৈশিষ্ট্যটি ডিফল্ট নয় , al চ্ছিক হওয়া উচিত

91

আপনি উদ্ধৃতি শৈলী চয়ন করতে পারেন :

ls --quoting-style=literal

যেমনটি:

ls -N

বা:

QUOTING_STYLE=literal ls

এটি একটি উপাধি করুন, বা export QUOTING_STYLE=literalআপনার .bashrcপ্রাক-8.25 আচরণ অর্জন করতে সেট করুন ।


11
কিছুটা অদ্ভুত বলে মনে হচ্ছে সাধারণ ইউনিক্স-ওয়াইয়ের আচরণ পেতে আমাকে তা করতে হবে। এছাড়াও, আমি পুরানো ডিফল্ট চাই। আমার মনে হয় না পালানো পুরানো ডিফল্ট ছিল - আমি মনে করি এটি সেখানে আসলে কী ছিল তা ঠিক ছাপা হয়েছিল।
Wyatt8740

9
প্রাক export QUOTING_STYLE=literal-8.25 আচরণের জন্য, আপনার বাশার্কে ব্যবহার করুন।
লেকেনস্টেইন

2
বা ব্যবহার -N, মনে হয়। আমি ইতিমধ্যে আমার নিজস্ব সংস্করণটি সংকলন করছি যেহেতু আমার কাছে ইতিমধ্যে একটি ব্যক্তিগত ভাণ্ডার স্থাপন করা হয়েছে।
Wyatt8740

2
@LSpice এর literalপরিবর্তে escapeআমি পোস্টটি ব্যবহার করার জন্য সম্পাদনা করেছি (আমি বিশ্বাস করি যে @cuonglm কেবল শৈলীটি কীভাবে পরিবর্তন করতে হবে তা প্রদর্শন করতে চেয়েছিলেন, বিশেষত escapeশৈলীকে লক্ষ্যবস্তু না করে )।
লেকেনস্টেইন

5
এই উত্তরটি আরও উন্নয়নের দাবিদার। এটি সরলভাবে আমলাতান্ত্রিক উত্তর এড়াতে যা জিজ্ঞাসা করেছিল তা সরাসরি সমাধান করে। প্রকৃতপক্ষে, পরিবেশের পরিবর্তনশীল পদ্ধতিটি বেশ মার্জিত বলে মনে হচ্ছে। (আমি ব্যক্তিগতভাবে নতুন আচরণটি পছন্দ করি কারণ এটি আরও দক্ষ সি ও পি ক্রিয়াকলাপের পক্ষে), তবুও, ls পুনঃনির্দেশ ব্যবহৃত হয় তখন পুরানো পদ্ধতিতে আচরণ করার পক্ষে যথেষ্ট চালাক, সুতরাং ls এর আউটপুট ব্যবহারকারী স্ক্রিপ্টগুলিতে কোনও ক্ষতি হবে না।
মার্সেলো

42

পরিবর্তন সম্পর্কে কয়েকটি বিষয়।

  • এটি কোর্টিলস v8.25 এ প্রবর্তিত হয়েছিল এবং v8.26 এ প্রান্তিককরণের উন্নতি হয়েছিল
  • এটি কেবলমাত্র টার্মিনালগুলিতে আউটপুট করার সময় ঘটে তাই স্ক্রিপ্টগুলি ভেঙে না
  • এটি হোয়াইটস্পেস সম্বলিত ফাইলগুলির জন্য ব্যবহারকারীদের আউটপুটকে বিচ্ছিন্ন করে
  • এটি আউটপুটকে স্যানিটাইজ করে তাই এটি অনুলিপি এবং পেস্ট করা নিরাপদ
  • আউটপুট এখন সবসময় অনুলিপি করে শেলের কাছে ফিরে পেস্ট করতে বৈধ
  • ব্যবহারকারীরা তাদের এলএস নামটিতে -N যোগ করে পুরানো ফর্ম্যাটটিতে ফিরে আসতে পারেন

7
আমার শেষ উদাহরণটি অস্পষ্ট নয়? সম্ভবত না - তবে এটি অবশ্যই বিভ্রান্তিকর এবং ডেসিফার করতে আরও সময় নেয়। আমি মনে করি এটি একটি ভয়াবহ পরিবর্তন (আপনার উদ্দেশ্যে কোনও অপরাধ)) যদিও ওরফে টিপটির জন্য ধন্যবাদ।
Wyatt8740

27
দ্রষ্টব্য: এই পরিবর্তনটি কোরিউটিলেস ৮.২৫ সালে প্রবর্তিত হয়েছিল ( এই পোস্টের মতো একই প্যাড্রাইগ দ্বারা রচিত প্রতিশ্রুতিবদ্ধ )। ব্যক্তিগতভাবে আমি মনে করি যে এই আচরণটি সাবঅপটিমাল, এটি যখনই কোনও ফাইলের নামের সাথে স্থান হয় তখনই এটি প্রান্তিককরণটি ভেঙে দেয়।
লেকেনস্টেইন

10
আমার ক্ষমাপ্রার্থী - দৃশ্যত আপনি নিরাপদে কমপক্ষে শেল-কোটগুলি শেল-কোট করছেন। আমি এখনও এটি পছন্দ করি না। বিকল্পগুলি ঠিক আছে - তবে দশক-পুরানো ইউনিক্স মূল ইউটিলিটির এমন খুব ভাল-নির্দিষ্ট ডিফল্ট আচরণকে এমনভাবে পরিবর্তন করা যাতে এর সত্যতা হ্রাস পায় কেবলমাত্র একটি খারাপ ধারণা হতে পারে ।
মাইকসার্ভ

12
@ পেদ্রাগ ব্র্যাডি তাই, আপনি কি lsভাঙতে যাচ্ছেন ? আপনার পরিবর্তনের বিরুদ্ধে এই সমস্ত যুক্তি দেখুন Look কেউ চায় না। সম্ভবত এখন বিশ্বের কাছে ক্ষমা চাওয়ার এবং এটিকে পূর্বাবস্থায় ফেলার সময়।
ক্রিস ওয়ারিক

6
@ পেদ্রাগ ব্র্যাডি তাই এই ভুল, ভাঙা ইত্যাদি কীভাবে ব্যাখ্যা করেছেন এমন অনেক লোক সত্ত্বেও আপনি এখনও এটিকে ফিরিয়ে আনবেন না যাতে ডিফল্টটি অপরিবর্তিত থাকে? আপনার বিশ্বাসের বিপরীতে, এই পরিবর্তনটি বিভ্রান্তিকে বিভ্রান্ত করছে না । পরামর্শ দেওয়া হচ্ছে যে লোকেরা পরিবেশের পরিবর্তনশীল বা উরফ সেট করে থাকে সর্বোত্তম, এ্যাসিনাইন।
চিহ্নিত করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.