লিনাক্স: শেবাং ইন্টারপ্রেটার মূল হিসাবে চালিত হওয়ার সময় এনকোডিংয়ের বিষয়ে অভিযোগ করে


0

অদ্ভুত ঘটনা: একটি পাইথন স্ক্রিপ্ট একটি অনিবদ্ধ ব্যবহারকারী হিসাবে চালিত হয় তবে মূল হিসাবে প্রত্যাখ্যান করে:

doprea@mlll2584:~$ python /opt/updatednsfix.py
Please retry with super-user privileges

$ sudo su
# /opt/updatednsfix.py 
bash: /opt/updatednsfix.py: /usr/bin/python^M: bad interpreter: No such file or directory

ডস 2 ইউনিক্স এটি স্থির করে (নীচে মূল হিসাবে চলমান)। কেন এটি কেবল মূলের নীচে সমস্যা হবে?

# dos2unix /opt/updatednsfix.py 
dos2unix: converting file /opt/updatednsfix.py to Unix format ...

# /opt/updatednsfix.py 
A record successfully updated in DNS
IPV4 PTR records successfully updated in DNS

উত্তর:


1

আপনার শেবাং শেষে একটি অতিরিক্ত চরিত্র ছিল। ^Mঅর্থ CRবা (অন্য স্বরলিপি) \r। এটি \r\nসিকোয়েন্সের একটি অংশ যা ডস এবং উইন্ডোজে লাইন এন্ডিং সিকোয়েন্স। লিনাক্সে ডান সঠিক যা dos2unixক্রম রূপান্তরিত \n

আপনি চালানোর সময় শেবাংকে একটি মন্তব্য হিসাবে বিবেচনা করা হয়

python /opt/updatednsfix.py

সুতরাং অতিরিক্ত চরিত্রটি কিছু যায় আসে না। আমার পরীক্ষাটি ইঙ্গিত pythonদেয় না \r\nএবং এটি ঠিক কাজ করে does rootআপনি যেমন স্ক্রিপ্টটি চালানোর জন্য আলাদা উপায় বেছে নিয়েছেন:

/opt/updatednsfix.py

এবং এক্ষেত্রে শেবাংকে ব্যাখ্যা করা হচ্ছে। ফাইলটি /usr/bin/python^Mপাওয়া যায় নি - সুতরাং ত্রুটি।

কেন এটি কেবল মূলের নীচে সমস্যা হবে?

এটি সম্পর্কে না root। আসল পার্থক্যটি আপনি স্ক্রিপ্টটি চালানোর একটি পদ্ধতিতে ছিল: python /opt/updatednsfix.pyবনাম /opt/updatednsfix.py


বিষ্ঠা। এটি ছিল একটি মিসকপি। এই মামলার সঠিক উদাহরণটি দেখানোর জন্য আমি পোস্টটি আপডেট করেছি। আমি এটি পাইথনে পাস করেছি বা সরাসরি চালিয়েছি কিনা একই ফলাফল পেয়েছি। এটা কোন মানে না।
ডাস্টিন ওরেপা

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