#! / Usr / bin / env বাশ কেন আমার সিস্টেমে কাজ করছে না?


11

কিছু ইনস্টলেশন স্ক্রিপ্ট যেখানে তারা অভিযোগ করেছিল সেগুলি চালানোর সময় আমি কিছু সমস্যার মধ্যে পড়েছিলাম bad interpreter

সুতরাং আমি একটি তুচ্ছ উদাহরণ তৈরি করেছি তবে সমস্যাটি কী তা বুঝতে পারছি না, নীচে দেখুন।

#!/usr/bin/env bash
echo "hello"

উপরের স্ক্রিপ্টটি কার্যকর করা নিম্নলিখিত ত্রুটির ফলস্বরূপ

[root@ech-10-24-130-154 dc-user]# ./junk.sh
bash: ./junk.sh: /usr/bin/env: bad interpreter: No such file or directory

/usr/bin/envফাইল বিদ্যমান, নীচে দেখুন:

[root@ech-10-24-130-154 dc-user]# ls -l /usr/bin/env
lrwxrwxrwx 1 root root 13 Jan 27 04:14 /usr/bin/env -> ../../bin/env
[root@ech-10-24-130-154 dc-user]# ls -l /bin/env
-rwxr-xr-x 1 root root 23832 Jul 16  2014 /bin/env
[root@ech-10-24-130-154 dc-user]#

আমি যদি নিয়মিত শেবাং ব্যবহার করতে স্ক্রিপ্টটি পরিবর্তন করি তবে #!/bin/bashএটি কোনও সমস্যা করে না। #!/bin/env bashপাশাপাশি কাজ করে।

পোর্টেবল শেবাংকে কাজ করতে পরিবেশ থেকে কী অনুপস্থিত?

ls -lL /usr/bin/envপ্রত্যাবর্তন করে ls: cannot access /usr/bin/env: No such file or directoryতাই আমি অনুমান করি যে আমাকে প্রতীকী লিঙ্কটি পরিবর্তন করতে হবে? আমি কি এটি নির্দেশ করতে পারি /bin/env?

env --version 8.4 এবং ওএস হ'ল রেড হ্যাট এন্টারপ্রাইজ লিনাক্স সার্ভার 6.6 প্রকাশ করে।


1
সাধারণত এটি লাইনে ক্যারেজ-রিটার্ন / লাইন-ফিড সমাপ্তির কারণে হয়। বিকল্পভাবে: env এর অবস্থান
টমাস ডিকি

উত্তর:


7

ls -lL /usr/bin/envপ্রতীকী লিঙ্কটি নষ্ট হয়ে গেছে তা দেখায়। এটি ব্যাখ্যা করে যে শেবাং লাইন কেন কাজ করছে না: কর্নেল একটি জটলা প্রতীকী লিঙ্কটি কার্যকর করতে চেষ্টা করছে এবং স্পষ্টতই ব্যর্থ হচ্ছে।

/usr/bin/env -> ../../bin/envসঠিক /usrএবং /usr/binযদি উভয়ই প্রকৃত ডিরেক্টরি হয় (সিমলিঙ্ক নয়)। স্পষ্টতই এটি আপনার মেশিনের ক্ষেত্রে নয়। সম্ভবত /usrএকটি প্রতীকী লিঙ্ক? (স্পষ্টতই এটি কোনও প্রতীকী লিঙ্ক নয় /, অন্যথায় /usr/bin/envএকই ফাইলটি হবে /bin/env, প্রতীকী লিঙ্ক নয়)।

আপনাকে সেই প্রতীকী লিঙ্কটি ঠিক করতে হবে। আপনি এটিকে পরম লিঙ্ক করতে পারেন:

sudo ln -snf /bin/env /usr/bin/env

আপনি এটিকে আপেক্ষিক লিঙ্ক করতে পারেন, তবে আপনি যদি তা করেন তবে নিশ্চিত হয়ে নিন যে এটি সঠিক। সিমলিংক তৈরি করার আগে আপনি এটি পেয়েছেন তা নিশ্চিত করতে স্যুইচ করুন /usr/binএবং চালান ls -l relative/path/to/bin/env

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


এটি সঠিক, /usr/binঅন্য একটি ফাইল সিস্টেমে স্থানান্তরিত হয়েছিল এবং এটি একটি প্রতীকী লিঙ্ক/vol_01/usr/bin
২২

-1

এখানে (ফেডোরা 23) /binএকটি প্রতীকী লিঙ্ক /usr/bin; যদি আপনার অনুরূপ সেটআপ থাকে তবে সিম্বলিক লিঙ্কটি /usr/bin/envকেবল আপনাকে একটি অসীম লুপ কিনে।

সম্পর্কিত প্যাকেজগুলি পরীক্ষা করুন rpm -qf /usr/bin/env /bin/env, এবং সেগুলি পুনরায় ইনস্টল করুন (এখানে coreutils, যেমন। yum reinstall coreutilsবা অনুরূপ)। এটি কোনও বিভ্রান্তিকর হাতাহাতি সংশোধন করা উচিত।


আমি ইতোমধ্যে পুনরায় ইনস্টল করেছি coreutilsতবে এতে কোনও পার্থক্য হয়নি। এটা বেশ অদ্ভুত। /usr/bin/envএটা লক্ষ্য করার জন্য একটি আপেক্ষিক পাথ দিয়ে একটি সিম্বলিক লিঙ্ক ../../bin/env। সুতরাং যে হওয়া উচিত /bin/envযা বিদ্যমান। সুতরাং আমি বুঝতে পারছি না কেন সেই প্রতীকী লিঙ্কটি কাজ করে না। আমি টার্গেটটি প্রতিস্থাপন করেছি যাতে এটি /bin/envনিখুঁত পথে চিহ্নিত করে এবং এটি কাজ করে বলে মনে হয়।
কনভরিফিন

যদি /binএকটি সিম্বোলিক লিঙ্ক ছিল /usr/binconorgriffin এর সিস্টেমে, তারপর /usr/bin/envএবং /bin/envএকই ফাইল হতে হবে।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.