শপ্ট কমান্ড লাইনে কাজ করে, স্ক্রিপ্টে চালানোর সময় খুঁজে পাওয়া যায় না


13

আমি কিছু ফাইল চারপাশে অনুলিপি করার জন্য একটি স্ক্রিপ্ট লিখছি, এবং shopt -s dotglob সিপি সক্ষম করার জন্য ডটফাইলে লাইক .jshintএবং হোয়াট নোট ব্যবহার করার চেষ্টা করছি ।

আমি shopt -s dotglobকোনও ত্রুটি না করে সরাসরি ব্যাশ প্রম্পটে চালাতে পারি । তবে স্ক্রিপ্টটি চালানো ত্রুটিটি ছুড়ে ফেলেছে:

script.sh: 81: script.sh: shopt: not found

আমি শিবাং শিরোলেখ সহ ব্যাশ শেলের মধ্যে এই স্ক্রিপ্টটি চালাচ্ছি #!/usr/bin/env bash। ত্রুটি রেখা:

shopt -s dotglob
cp -r $TEMP/img/* $TARGET/img/
cp -r $TEMP/js/* $TARGET/js/
cp -r $TEMP/less/* $TARGET/less/

গুগলে সহায়ক কিছু খুঁজে পাচ্ছেন না, এখানে সমস্যাটি সম্পর্কে কোনও ধারণা?


অনুস্মারকটির জন্য ধন্যবাদ, আমি যা পারলাম তার জন্য নির্বাচিত উত্তরগুলি। এই প্রশ্নের পাশাপাশি এখনও একটির এখনও ভাল উত্তর নেই।
কুরটোসিস

3
সহজ #!/bin/bashহেডার দিয়ে চেষ্টা করবেন ?
পর

এবং কোন উবুন্টু সংস্করণ?
পর

2
@ আইজএক্স, এটি সঠিক উত্তর, shoptএকটি ব্যাশ বিল্টিন, shনেই shoptএবং ত্রুটি বার্তাটি ত্রুটি বার্তার মতো দেখাচ্ছে dash। সুতরাং সম্ভবত এখানে ত্রুটিটি একটি বাশ স্ক্রিপ্টটি চালিয়ে যাচ্ছে sh(যা উবুন্টুতে dashডিফল্টরূপে রয়েছে)। এমনকি যদি এটির shজন্য একটি সিমিলিংক হয় তবে এটির সাথে bashব্যাশ স্ক্রিপ্ট shচালানো এটির মতো চালানোর মতো নয় bash
গিরিহা

উত্তর:


23

মন্তব্যগুলি থেকে একটি উত্তর গঠন করতে:

অভ্যাসের বাইরে থাকা অনেকেই এর shপরিবর্তে স্ক্রিপ্টগুলি চালান bash। পোর্টেবিলিটিটি যদি উদ্বেগের বিষয় হয় তবে এটি একটি ভাল অনুশীলন, তবে অনেক লোক তা করে কারণ তারা এগুলি বোঝে না এমন কিছু অনুলিপি করছেন।

আপনার স্ক্রিপ্টটি অ-ডেস্কটপ লিনাক্স সিস্টেমে চালিত না হওয়া (উদাহরণস্বরূপ, অ্যান্ড্রয়েড ডিভাইসে শেল স্ক্রিপ্টগুলি চালানো একেবারে পৃথক), আমি শুরুতে বাশ শেবাং লাইনটি ব্যবহার করার পরামর্শ দিই:

#!/bin/bash

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


5
পুরোপুরি ক্রস-সিস্টেম হওয়ার জন্য, আমি পছন্দ করি: #!/usr/bin/env bash কোন বাশটি ব্যবহার করা উচিত তা জানার বিষয়টি env এর কাজ (উদাহরণস্বরূপ আপনি এটি প্যাচ করেছেন)।
shrikeh

-1

আপনাকে zsh থেকে প্রস্থান করতে হবে এবং প্রদর্শিত বাশাকে সক্রিয় করতে হবে:

exec bash

কমান্ড রান করুন

source ~/.bashrc

যার পরে আপনি zsh প্রতিক্রিয়া করতে পারেন:

exec zsh

আশা করি এইটি কাজ করবে


হুম। 1) আমি মনে করি না যে ওপি zsh ব্যবহার করছিল, ২) এএফএইকে ~/.basrcএই ক্ষেত্রে স্টার্টআপে ব্যাশ দ্বারা চালিত হয় সুতরাং এটিকে স্পষ্টভাবে বলার দরকার নেই, ৩) ওপির আদেশটি কোথায় কার্যকর করা হয়? এবং 4) execদুবার ব্যবহারের ফলে আপনি প্রাথমিক zsh শেলটিতে আপনার পরিবেশের পরিবর্তনগুলি হারাতে পারেন যা আপনি কেবল ব্যাশকে ডাকলে এমনটি হবে না।
xenoid

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