मैंने अभी देखा कि मेरी एक मशीन पर (डेबियन सिड को चलाने पर) जब भी मैं 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 आउटपुट के साथ अपडेट (जो कि वास्तव में बहुत कम भ्रमित है, लेकिन फिर भी डिफ़ॉल्ट रूप से परेशान है)। इस प्रिंटआउट के लिए Pádraig ब्रैडी का धन्यवाद:
$ ls
"'test 1.txt'" test1.txt
'test 1.txt' "thishasasinglequotehere'.txt"
$ ls -N
'test 1.txt' test1.txt
test 1.txt thishasasinglequotehere'.txt
ये क्यों हो रहा है? मैं इसे ठीक से कैसे रोकूं?
स्पष्ट करने के लिए, मैं खुद को स्वचालित रूप से रंग आउटपुट के लिए सेट करता हूं। इसने पहले कभी भी चीजों के बारे में उद्धरण नहीं दिया।
मैं चल रहा हूँ bash
और Coreutils 8.25।
EDIT: लगता है कि कोरुटाइल डेवलपर्स ने सोचा (लिंक) यह एक अच्छा विचार है कि कम से कम विस्मय के सिद्धांत के साथ-साथ UNIX परंपरा के 46+ वर्षों को तोड़ने के बावजूद यह एक वैश्विक डिफ़ॉल्ट है ।
किसी भी तरह एक recompile बिना इसे ठीक करने के लिए?
अद्यतन - अक्टूबर 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
कमांड क्यों नहीं ।