#! / বিন / বাশ - এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই


69

আমি একটি বাশ স্ক্রিপ্ট তৈরি করেছি তবে যখন আমি এটি সম্পাদন করার চেষ্টা করি তখন আমি পাই

#!/bin/bash no such file or directory

কমান্ডটি চালানো দরকার: bash script.shএটি কাজ করার জন্য।

আমি এটা কিভাবে ঠিক করবো?


আমার কাছে এই সমস্যাটি এখন সাইগউইনের অধীনে রয়েছে একটি স্ক্রিপ্ট যার সাথে আমি শপথ করতে পারলাম ইতোমধ্যে সমস্যা ছাড়াই চলছে। আমি সমস্ত উত্তর যাচাই করেছিলাম, তবে কোনওটি মানায় বলে মনে হয় না। অন্যান্য প্রশ্নোত্তরে 32/64 বিট সমস্যার কথাও উল্লেখ করা হয়েছে, তবে শেল স্ক্রিপ্টগুলির জন্য এটি বাদ দেওয়া যেতে পারে, তাই না?
জানু

পেয়ে থাকলে এর কারণ, নতুন আনোয়ার ইন বিশদ যোগ unix.stackexchange.com/a/450389/62636 ক্ষেত্রে কারো এছাড়াও ব্যবহার করেছেন #!/usr/bin/env bashপরিবর্তে #!/bin/bashএবং ... এখানে খুঁজছি
জানুয়ারী

উত্তর:


100

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

চালান:

$ head -1 yourscript | od -c

এবং দেখুন কিভাবে এটি শেষ হয়।

এটা ভুল:

0000000   #   !   /   b   i   n   /   b   a   s   h  \r  \n

এটিও ভুল:

0000000 357 273 277   #   !   /   b   i   n   /   b   a   s   h  \n

এটি সঠিক:

0000000   #   !   /   b   i   n   /   b   a   s   h  \n

ব্যবহার করুন dos2unix(অথবা sed, tr, awk, perl, python...) আপনার স্ক্রিপ্টটি ঠিক করতে হলে এই সমস্যা।

এখানে একটি যা বিওএম এবং টেইলিং সিআর উভয়কেই সরিয়ে ফেলবে:

sed -i '1s/^.*#//;s/\r$//' brokenScript


নোট করুন যে আপনি স্ক্রিপ্টটি চালানোর জন্য যে শেলটি ব্যবহার করছেন সেটি প্রদর্শিত ত্রুটি বার্তাগুলিকে সামান্য প্রভাবিত করবে।

এখানে কেবলমাত্র তাদের নাম ( echo $0) দেখানো এবং নিম্নলিখিত স্বতন্ত্র শেবাং লাইনগুলি রয়েছে এমন তিনটি স্ক্রিপ্ট রয়েছে:

correctScript:

0000000   #   !   /   b   i   n   /   b   a   s   h  \n

scriptWithBom:

0000000 357 273 277   #   !   /   b   i   n   /   b   a   s   h  \n

scriptWithCRLF:

0000000   #   !   /   b   i   n   /   b   a   s   h  \r  \n

বাশ অধীনে, তাদের চালানো এই বার্তাগুলি প্রদর্শিত হবে:

$ ./correctScript
./correctScript
$ ./scriptWithCRLF
bash: ./scriptWithCRLF: /bin/bash^M: bad interpreter: No such file or directory
$ ./scriptWithBom
./scriptWithBom: line 1: #!/bin/bash: No such file or directory
./scriptWithBom

স্পষ্টতভাবে দোভাষীকে কল করে বগাসগুলি চালানো সিআরএলএফ স্ক্রিপ্টকে কোনও সমস্যা ছাড়াই চলতে দেয়:

$ bash ./scriptWithCRLF
./scriptWithCRLF
$ bash ./scriptWithBom
./scriptWithBom: line 1: #!/bin/bash: No such file or directory
./scriptWithBom

আচরণের অধীনে এখানে পর্যবেক্ষণ করা হচ্ছে ksh:

$ ./scriptWithCRLF
ksh: ./scriptWithCRLF: not found [No such file or directory]
$ ./scriptWithBom
./scriptWithBom[1]: #!/bin/bash: not found [No such file or directory]
./scriptWithBom

এবং এর অধীনে dash:

$ ./scriptWithCRLF
dash: 2: ./scriptWithCRLF: not found
$ ./scriptWithBom
./scriptWithBom: 1: ./scriptWithBom: #!/bin/bash: not found
./scriptWithBom

2
যদি সমস্যা হয় তবে তা প্রকাশের আর একটি উপায় hexdump -C yourscript | head -n 1। আমি এখনও dos2unix yourscriptএটি ঠিক করতে ব্যবহার করব ।
কেভিন এম

হ্যাঁ এটা খুব ভাল হতে পারে। আমি উইন্ডোজ এডিট। টিপ জন্য জিনিস।
নিকোলাস ডি ফন্টেনে

1
এটি যদি কোনও সিআরএলএফ সমস্যা হত তবে আপনি কোনও #!/bin/bash no such file or directoryত্রুটি বার্তা দেখতে পাবেন না , কারণ কোনও কারণ কার্যকর করার বা খোলার চেষ্টা করার কোনও কারণ নেই #!/bin/bash। এটিই /bin/bash<CR>মৃত্যুদন্ড কার্যকর করা হবে।
স্টাফেন চেজেলাস

1
@ স্টাফেনচাজলাস যেমন ডস 2 ইউনিক্স সমস্যা সমাধান করেছেন, তাতে সন্দেহ নেই যে এটি কোনও সিআরএলএফ সমস্যা ছিল না। ত্রুটি বার্তাটি সম্ভবত কেবলমাত্র সঠিকভাবে প্রতিলিপি ছিল ..
jlliagre

6
dos2unixএকটি ইউটিএফ -8 বিওএমও সরিয়ে দেয়। একটি ইউটিএফ -8 বিওএম ত্রুটি বার্তাটি ব্যাখ্যা করতে পারে।
স্টাফেন চেজেলাস

17

এটি কোনও ইউটিএফ -8 স্ক্রিপ্টের কোনও বিওএম দ্বারাও হতে পারে। আপনি যদি উইন্ডোতে স্ক্রিপ্টটি তৈরি করেন তবে কখনও কখনও আপনি ফাইলটির শুরুতে কিছুটা আবর্জনা পান।


BOM হিসেবে awk ব্যবহার সহজে মুছে ফেলা হতে পারে, stackoverflow.com/questions/1068650/...
pauxu

1
নোট করুন যে ম্যাকের জন্য ভিজ্যুয়াল স্টুডিও একটি বিওএম .োকাবে।
ক্লিয়ারার

9

আসল, বাশ স্ক্রিপ্টের জন্য সঠিক শিবাংটি হ'ল:

#!/usr/bin/env bash

কারণ, ফ্রিবিএসডি তে বাশটি অবস্থিত /usr/local/bin/bash


13
"ডান" এই জাতীয় ক্ষেত্রে ব্যবহার করা একটি কঠিন শব্দ। সম্ভবত একটি ভাল শব্দগুচ্ছটি "কম ত্রুটি-প্রবণ" হবে।
HalosGhost

1
এটিও ভয়াবহ; / usr বিদ্যমান ধারণা অনুমান একটি খারাপ আইএমও। উদাহরণস্বরূপ, হাইকু / ইউএসআর নেই।
jessicah

9

আপনি উভয় সমস্যার উপস্থিত থাকলে তা ঠিক করতে vi ব্যবহার করতে পারেন:

vi <your_file>
:set ff=unix
:set nobomb
:wq

উত্তরগুলি যথাসম্ভব স্ব-অন্তর্ভুক্ত হওয়া উচিত। প্রশ্নটিতে দুটি সমস্যার কথা বলা হয়নি; আপনি যদি অন্য উত্তরগুলি তৈরি করতে চলেছেন তবে কমপক্ষে সেগুলি কি আপনার বলা উচিত । আরও ভাল, আপনি কীভাবে এটি প্রশ্নের উত্তর দেয় তা ব্যাখ্যা করা উচিত ।
জি ম্যান

আরও উইন্ডোজ সরঞ্জামগুলি ডাউনলোড না করে খুব দ্রুত সমাধান করুন, ধন্যবাদ!
স্টিম্পওয়ার্ড

1
@ জি-ম্যান অন্যান্য উত্তরগুলি ইতিমধ্যে এটিতে যেতে ইচ্ছুক হওয়ার চেয়ে আরও ভাল বিশদে উল্লেখ করেছে। পুনরাবৃত্তি করার দরকার নেই, তবে এটি যদি বেদনাদায়কভাবে স্পষ্ট না হয় তবে আপনার উইন্ডোজ লাইন সমাপ্ত হতে পারে এবং একটি উইন্ডোজ বিওএম লুকানো লুকানো থাকতে পারে। আমি মনে করি যে প্রচুর লোকেরা উত্তর স্ক্যান করছে তারা স্বাবলম্বী হওয়ার পরিবর্তে বংশবৃদ্ধির প্রশংসা করে, বিশেষত যখন অন্যান্য উত্তরে আরও বিশদ থাকে।
cwash

4

আপনার যদি ডস 2 ইউনিক্স না থাকে তবে এই সমস্যাটি সমাধানের এই উপায়।

cp script _p4 && tr -d '\r' < _p4 > script && rm _p4

3

বাই-অর্ডার চিহ্ন (বিওএম)

এটি কোনও বিওএম দ্বারা হতে পারে। উইকিপিডিয়া থেকে, একটি বিওএম একটি

বাইট অর্ডার চিহ্ন (বিওএম) হ'ল একটি ইউনিকোড অক্ষর, ইউ + ফেফএফএফ বাইট অর্ডার চিহ্ন (বিওএম), যার পাঠ্য স্ট্রিমের শুরুতে যাদু সংখ্যার উপস্থিতি পাঠ্য গ্রহণকারী একটি প্রোগ্রামে বেশ কয়েকটি জিনিসকে সংকেত দিতে পারে

দুর্ভাগ্যক্রমে, এটি লিনাক্স কার্নেলের সাথে এমন কোনও সংকেত দেয় না যা শে-ব্যাং লাইন পরিচালনা করে। আপনি একটি BOM ব্যবহার করে যাচাই করতে পারেন file,

file /tmp/foo 
/tmp/foo: UTF-8 Unicode (with BOM) text

অথবা আপনি প্রথম কয়েকটি অক্ষর হেক্সডাম্প করতে পারেন এবং দেখতে পারেন যে সেগুলি BOM অক্ষরের সাথে ম্যানুয়ালি মেলে কিনা

আপনি বিওএম অক্ষরগুলি একবার তাদের মতো জানতে পারলে তা ছিনিয়ে নিতে পারেন,

sed -i '1 s/^\xef\xbb\xbf//' *.txt

0

আমি দুর্ঘটনাক্রমে একটি কার্যকর কার্যকর বাশ যুক্ত করতে পেরে সমস্যাটি PATHপ্রকাশ করেছি এবং কারণ আমার স্ক্রিপ্টে আরও নমনীয় #!/usr/bin/env bashশেবাং ব্যবহার করা হয়েছিল (প্রথম দিকের বাশকে নির্বাহযোগ্য হতে)।

command -v bash
/cygdrive/c/Program Files/Git/bin//bash

আমি উইন্ডোজ cygwinজিআইআইটি জিআইআইআই (সিগউইন নেটিভ গিটের সাথে কাজ করছিলাম না ...) এর সাথে একত্রে কাজ করার জন্য উইন্ডোজের জন্য জিআইটি ইনস্টল করেছি । আমি এখন #!/bin/bashশ্যাবন্ডে স্যুইচ করে এবং উইন্ডো থেকে জিআইটি সরিয়ে এটি সমাধান করেছি PATH


-3

চেষ্টা #!/bin/bash

দ্বিতীয় জিনিস: find / -name bash
তৃতীয় জিনিস:ls -al /bin/bash


বা ঠিক which bash। আমরা জানি যে এটি খুঁজে পেয়েছে কারণ এটি কাজ করছে bash script.sh
কেভিন

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