सवाल विलय होम निर्देशिकाएं रीडलाइन / .bashrc तोड़ती है [डुप्लिकेट]


इस प्रश्न का उत्तर यहां दिया गया है:

पिछले कुछ दिनों में, मैंने 12.04 के एक पुराने होम निर्देशिका में काम करने की स्थापना से होम निर्देशिका विलय कर दी, मुझे विश्वास है कि 10.04 के इंस्टॉल से (यह एक नंगे ड्रव था)

मुझे लोड करने और ठीक से माउंट करने के लिए नया ड्राइव मिला, लेकिन जब मैं 12.04 स्थापना से .bashrc प्रविष्टियों का प्रयास करता हूं और उपयोग करता हूं, तो निम्न उपनाम जैसी चीजें:

alias banana='echo banana'

यह निम्नलिखित त्रुटियों का उत्पादन करता है:

-bash: $'\r': command not found
-bash: $'\r': command not found
-bash: $'\r': command not found
: invalid shell option name
-bash: $'\r': command not found
-bash: $'\r': command not found
: invalid shell option name
-bash: $'\r': command not found
-bash: $'\r': command not found
-bash: $'\r': command not found
-bash: $'\r': command not found
-bash: .bashrc: line 36: syntax error near unexpected token `$'in\r''
'bash: .bashrc: line 36: `case "$TERM" in

मुझे उस पाठ को नहीं मिला जिसे उस संदर्भ में संदर्भित किया जा रहा है। Bashrc फ़ाइल (यह केवल तब काम करता है जब मैं इसे / etc / skel से कॉपी करता हूं, और फिर भी, उपनाम और सोर्सिंग जोड़ने के बाद, फिर भी उपनाम और सोर्सिंग को हटा देता है, फिर भी त्रुटियों का उत्पादन करता है। बैश को फिर से काम करने का एकमात्र तरीका फ़ाइल को / etc / skel से दोबारा कॉपी करना है

ऐसा लगता है कि मैं इन त्रुटियों के बिना .bashrc में कोई भी बदलाव नहीं कर सकता। मुझे संदेह है कि इसमें रीडलाइन या .inputrc के साथ कुछ करना है, जिसमें समस्याएं भी थीं (हालांकि इन्हें अभी हल किया जाना प्रतीत होता है)। अभी के रूप में, / home / उपयोगकर्ता निर्देशिका में कोई .inputrc नहीं है।

आपके द्वारा दी जा सकने वाली कोई भी सहायता के लिए शुक्रिया!


1
2017-11-08 18:27


मूल


.Bashrc फ़ाइल में अपना परिवर्तन करने के लिए आप किस संपादक का उपयोग कर रहे हैं? ऐसा लगता है कि फ़ाइल को विंडोज-स्टाइल लाइन एंडिंग्स (सीआर-एलएफ, या) के साथ फिर से सहेजा जा रहा है \r\n) यूनिक्स शैली के बजाय (एलएफ, यानी सादा \n)। - steeldriver
मैं टर्मिनल के भीतर से Vim का उपयोग कर रहा हूँ - SkyCaptain


जवाब:


इसे इस्तेमाल करे:

sed -i -e 's/\r$//' ~/.bashrc

यह विंडोज-स्टाइल लाइन एंडिंग को हटा देगा (सीआर वर्ण - \r)। अब, अगर आप source ~/.bashrc आपको कोई त्रुटि नहीं मिलनी चाहिए।

अगला, किसी भी सामग्री को किसी अन्य फ़ाइल से कॉपी करने से पहले, उस फ़ाइल के लिए एक ही कमांड चलाएं:

sed -i -e 's/\r$//' /path/to/file_from_where_you_copy

1
2017-11-08 19:16



उत्तम! यह समाधान काम करता है, धन्यवाद! अब मुझे यह पता लगाना है कि ये लाइन अंत कहां से आ रही हैं। - SkyCaptain
यदि आपके पास ~ / .vimrc फ़ाइल है, तो इसे खोलें और सुनिश्चित करें कि इसमें कोई शामिल नहीं है set ff=dos असाइनमेंट - यदि ऐसा होता है, तो आप स्पष्ट रूप से यूनिक्स एंडिंग्स को सेट कर सकते हैं set ff=unix(हालांकि मुझे लगता है कि यह * निक्स प्लेटफ़ॉर्म पर यूनिक्स-शैली के लिए डिफ़ॉल्ट होना चाहिए) - steeldriver
यदि आप खुद को किसी भी नियमितता के साथ ऐसा करने के लिए पाते हैं, तो dos2unix कमांड को क्लीनर सिंटैक्स के साथ इस sed अभिव्यक्ति के समान अनुवाद करने के लिए डिज़ाइन किया गया है dos2unix <filename>। आपको करना पड़ सकता है sudo apt-get install dos2unix प्रथम। - Steven K


त्रुटि:

$'\r': आदेश नहीं मिला

इसका मतलब है कि आपकी फाइल (.bashrc) किसी भी तरह विंडोज़ शामिल हैं रेखा अंत (सीआरएलएफ) और बैश उन्हें पहचान नहीं पाते हैं, इसलिए यह असफल रहा है। हो सकता है कि आपने विंडोज़ में उस फाइल को संपादित किया हो?

इसलिए आपको अपनी प्रभावित फ़ाइल को सीआरएलएफ से एलएफ में यूनिक्स-शैली लाइन के अंतराल का उपयोग करने के लिए परिवर्तित करना होगा।

यह द्वारा हासिल किया जा सकता है: dos2unix आदेश, उदा।

dos2unix ~/.bashrc

यदि आपके पास यह नहीं है, तो इसके माध्यम से स्थापित करें apt-get install tofrodos

अन्यथा यदि आपके पास Vim इंस्टॉल है, तो कोशिश करें:

ex +'%!tr -d "\r"' -scwq ~/.bashrc

एकाधिक फाइलों के लिए:

ex +'bufdo!%!tr -d \r' -scxa ~/.bash*

ध्यान दें :bufdo आदेश नहीं है POSIX


यदि आप किसी भी मौके से Vagrantfile का उपयोग कर रहे हैं और यह प्रावधान स्क्रिप्ट के हिस्से के रूप में होता है, तो आप सेट कर सकते हैं binary सेवा मेरे true आपके खोल के लिए, उदा।

# Shell provisioner, see: https://www.vagrantup.com/docs/provisioning/shell.html
config.vm.provision "shell" do |s|
  s.binary = true # Replace Windows line endings with Unix line endings.
  s.path = "script.sh"
end

1
2018-03-08 14:32



नोट bufdo POSIX नहीं है pubs.opengroup.org/onlinepubs/9699919799/utilities/ex.html - Steven Penny


फ़ाइल बहुत गन्दा लगता है। आप बस फ़ाइल को हटाना और एक नया प्रतिलिपि बनाना चाहते हैं /etc/skel बजाय:

rm ~/.bashrc
cp /etc/skel/.bashrc ~/.bashrc

फिर फ़ाइल को संपादित करें और सुनिश्चित करें कि यूनिक्स लाइन समाप्ति का उपयोग करके सहेजा गया है।


0
2017-11-08 18:55



ठीक है, ऐसा लगता है कि समस्या हल हो रही है यदि मैं: फ़ाइल को / etc / skel से कॉपी करें, विम सेव, स्रोत के साथ फ़ाइल को संपादित करें, हालांकि, मैं स्थानीय मशीन (जीवीआईएम) में खोले गए किसी अन्य फ़ाइल से उपनामों की प्रतिलिपि बनाने की कोशिश कर रहा हूं, फिर रिमोट फ़ाइल में चिपकाया (जीवीआईएम में भी)। जोड़ना, इन पंक्तियों को हटाने से त्रुटि फिर से हो जाती है। मुझे लगता है कि जीडीआईटी के साथ उस फ़ाइल / काटने और चिपकाने के दौरान मुझे एक ही समस्या है। - SkyCaptain