প্রথম লাইনে `#! / usr / bin / env পাইথন থাকলে স্ক্রিপ্টটি অজগর খুঁজে পেতে ব্যর্থ হতে পারে?


19

উবার্টু 12.04 এ ক্যাস্পারজগুলি চালানোর চেষ্টা করা হচ্ছে। এটি চালানোর পরে ইনস্টল করার পরে আমি পাই:

09:20 $ ll /usr/local/bin/casperjs
lrwxrwxrwx 1 root root 26 Nov  6 16:49 /usr/local/bin/casperjs -> /opt/casperjs/bin/casperjs

09:20 $ /usr/bin/env python --version
Python 2.7.3

09:20 $ cat /opt/casperjs/bin/casperjs | head -4 
#!/usr/bin/env python

import os
import sys

09:20 $ casperjs
: No such file or directory

09: 22 $ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06) 
[GCC 4.6.3] on linux2

সুতরাং পাইথন উপস্থিত এবং চলমান, ক্যাস্পারজগুলি সঠিক জায়গায় নির্দেশ করছে এবং এটি পাইথন স্ক্রিপ্ট। তবে আমি যখন এটি চালনা করি তখন আমি "এ জাতীয় কোনও ফাইল" পাই না।

আমি এ থেকে ক্যাস্পেরজ পাইথন ফাইলের প্রথম লাইনটি পরিবর্তন করে এটি ঠিক করতে পারি:

#!/usr/bin/env python

প্রতি:

#!/usr/bin/python

ফলাফল:

$ casperjs --version
1.1.0-DEV

আমি এটি সংশোধন করতে পেরেছি, তবে কেন ভাবছে যে এটি কেন কাজ করে নি #!/usr/bin/env python, কারণ এটি মনে হয় একটি সাধারণ ইন্টারপ্রেটার লাইন। আমার কি কিছু ভুল কনফিগার করা আছে?

ক্যাস্পারজগুলি পাওয়ার জন্য এখানে পদক্ষেপগুলি:

$ git clone git://github.com/n1k0/casperjs.git
$ cd casperjs
$ ln -sf `pwd`/bin/casperjs /usr/local/bin/casperjs
$ casperjs
: No such file or directory

আপনি কি strace /usr/local/bin/casperjsঅচল সংস্করণে চলার চেষ্টা করতে পারেন ? সহায়ক হতে পারে যদি আমরা দেখতে পেতাম যে এনভিটি কোন ফাইলগুলি কার্যকর করার চেষ্টা করে এবং এনভিটি পাইথন বা পাইথন খুঁজে পেতে ব্যর্থ হচ্ছে কিনা তা স্ক্রিপ্টটি খুলতে ব্যর্থ হচ্ছে।
মার্ক প্লটনিক

@ মার্কপ্লটনিক দৌড়ে গেছে যে, শতভাগ আউটপুট, বিশেষত কিছু?
jcollum

: No such file or directoryআউটপুট হওয়ার পূর্বে যে কোনও রেখা নির্গত হয় যা চালানোর চেষ্টা করে। [সম্পাদনা: সবেমাত্র গিলসের উত্তর দেখেছি। স্ট্রেস আউটপুটে লাইনের মতো লাইনগুলি পরীক্ষা করুন execve("/usr/bin/python\r", ...)। ]
মার্ক প্লটনিক

উত্তর:


36

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

সিআর সরান: শেবাং লাইনের একটি ইউনিক্স লাইন শেষ হওয়া প্রয়োজন (কেবলমাত্র লাইনফিড)। পাইথন নিজেই সিআরএলএফ লাইন শেষের অনুমতি দেয়, যাতে অন্য লাইনের সিআর অক্ষরগুলি ক্ষতি না করে। অন্যদিকে শেল স্ক্রিপ্টগুলি অবশ্যই সিআর অক্ষর মুক্ত থাকতে হবে।

উইন্ডোজ লাইনের শেষগুলি সরাতে, আপনি ডস 2 ইউনিক্স ব্যবহার করতে পারেন :

sudo dos2unix /usr/local/bin/casperjs

বা সেড:

sudo sed -i -e 's/\r$//' /usr/local/bin/casperjs

যদি আপনার অবশ্যই উইন্ডোজের অধীনে স্ক্রিপ্টগুলি সম্পাদনা করতে চান তবে এমন একটি সম্পাদক ব্যবহার করুন যা ইউনিক্স লাইন সমাপ্তির (যেমন নোটপ্যাডের চেয়ে কম মস্তিষ্ক-মৃত) কপি করে এবং ইউনিক্স ফাইল সম্পাদনা করার সময় এটি ইউনিক্স লাইন সমাপ্তি (যেমন শুধুমাত্র এলএফ) লিখতে কনফিগার করা হয়েছে তা নিশ্চিত করুন।


আমি এই সমস্যাটি চালিয়েছি তবে এর সর্বদা ^Mশেষে রয়েছে has আমি এখানে উবুন্টুতে একচেটিয়াভাবে রয়েছি তবে এখনও জেডিট মাঝে মাঝে কয়েক মিলিয়ন মাইল রেখে দেয় তাই আমি গ্যানির কাছে গেলাম। যাইহোক এটি একটি পৃথক ত্রুটি দেবে এবং এটি যে ত্রুটিটি আমি দেখছি তা নয়।
jcollum

1
সিজেআর ^Mবলার জন্য অন্যভাবে @jcollum ।
গিলস 21'18

হ্যাঁ আমি এটি বুঝতে পারি তবে আমি যা বলছি তা হ'ল আমি আর ত্রুটিটি পাচ্ছি না, সুতরাং এটি কোনও লাইন ব্রেক সমস্যা নয়।
jcollum

@jcollum আপনি শেবাং লাইন সম্পাদনা করার সময় আপনি সিআর সরিয়ে ফেলেছেন। যদি আপনি এটিকে আবার পরিবর্তন করেন #!/usr/bin/env python(কোনও সিআর পিছনে যোগ না করে), এটি কার্যকর হবে।
গিলস 21'31

2
পরিভাষা সম্পর্কে বিভ্রান্ত যে কারও জন্য দ্রষ্টব্য: সিআর = \r= ইউনিকোড ইউ + 0 ডি = ^ এম (সিটিআরএল + এম), এবং এলএফ = \n= ইউনিকোড ইউ + এ 0 = ^ জে (
সিটিআরএল

0

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

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