আমি টার্মিনালে একটি বাশ স্ক্রিপ্ট উত্সাহিত করছি , তাই ত্রুটির সাথে প্রস্থান করে
set -o errexit
আমার টার্মিনালটিকে মেরে ফেলেছে, যা একেবারে কিছুই নয়, কারণ আমাকে টার্মিনালটি বন্ধ করতে হবে, অন্য একটি খুলতে হবে এবং কিছু ভেরিয়েবল পুনরায় সেট করতে হবে।
এখনও অবধি, ব্যবহার করছি
command || return
স্ক্রিপ্টে লাইনগুলি, আমি যা চাই ঠিক তাই করছে
set -o errexit
করতে ... তবে আমি এটি পুরো স্ক্রিপ্টের জন্যই করতে চাই; শুধু একটি লাইন / কমান্ড নয়
সাইট স্থাপনের জন্য আমার কাছে একটি কমান্ড পূর্ণ ফাইল রয়েছে এবং আমি কমান্ডটি করব না || প্রত্যাবর্তন
ফাইলের প্রতিটি এক লাইনের জন্য
অন্য সেট বিকল্প আছে, বা অন্য কিছু যা টার্মিনালটি থেকে বেরিয়ে আসার পরিবর্তে "ফিরে" আসবে?
- কেবল স্পষ্টতার জন্য , আমি স্ক্রিপ্টটি মেরে ফেলতে চাই এবং টার্মিনালটিকে একই অবস্থায় ছেড়ে দিতে চাই যে টার্মিনালে চলমান কোনও পরিষেবা হ্রাস করতে সিটিআরএল + সি টিপুন। command || return
এটা করে তবে আমি || return
ফাইলের প্রতিটি লাইন ধরে রাখতে চাই না। সুতরাং আমি অনুরূপ কিছু সন্ধান করছি set -o errexit
, এটি টার্মিনালটি বন্ধ করে দেয় না
--- দ্রষ্টব্য: এতে দুটি লাইন দিয়ে একটি বোবা স্ক্রিপ্ট তৈরি করা হচ্ছে (সুপার.শ):
create_path=~/Desktop/site_builder/create.sh
source $create_path blah
এবং set -o errexit
create.sh এর শীর্ষে স্থাপন করা,
আমি যেমনটি আশা করি ঠিক তেমন কাজ করে। যাইহোক, এটি দুটি বাইন দিয়ে একটি ফাইল তৈরি করতে সত্যিই বোকা, কেবল টার্মিনাল থেকে কল করার পরিবর্তে অন্য একটি বাশ স্ক্রিপ্ট কল করতে। Ugghhh
এখানে কিছু উদাহরণ:
সুপার.শ
#!/bin/bash
create_path=~/Desktop/site_builder/create.sh
source $create_path blah
create.sh এ
#!/bin/bash
set -o errexit
#line below this is a line that fails and will cause the script to stop and return to the terminal as expected
sed "s/@@SITE_NAME@@/$dirname"
~/Desktop/site_builder/template_files/base.html > ~/Desktop/$dirname/templates/base.html # a line with a stupid error
টার্মিনালে:
$ bash super.sh
আশানুরূপ আউটপুট:
my-mac$
এইটা কাজ করে. কি বিরক্তিকর সমাধান।
আমি চাই , আদর্শভাবে, টার্মিনাল থেকে বোকা সুপার.শ ফাইলের মধ্যে যা চালানো হয়, সুপার.শ ফাইল নয়: ডি, টার্মিনালটি আমার উপর বন্ধ না করেই। আমি যা করার চেষ্টা করছি তার সাথে এটি ঘটে:
টার্মিনাল কমান্ড:
my-mac$ source $create_path blah
আমার এখনও আছে set -o errexit
টার্মিনালে আউটপুট এখানে
sed: 1: "s/@@SITE_NAME@@/blah": unterminated substitute in regular expression
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
[Process completed]
এবং তারপরে টার্মিনাল হিমশীতল। Ctrl + C কাজ করে না, Ctrl + Dও করে না
এর পরিবর্তে set -o errexit
, যদি আমি কেবল command || return
create.sh ফাইলে সর্বত্র বিবৃতি ব্যবহার করি , তবে আমি সরাসরি টার্মিনালে সুপারসার.শ লাইনে (টার্মিনাল থেকে সুপার.শ কল করার পরিবর্তে) লাস্টগুলি সম্পাদন করার সময় যা চাই তা ঠিক পাই। তবে এটি ব্যবহারিক সমাধানও নয়।
দ্রষ্টব্য: আমি কেবলমাত্র একটি শিশু শেল তৈরির বিষয়ে @ অ্যারডনের জবাব পছন্দ করেছি তাই আমি টার্মিনালের পরিবর্তে স্ক্রিপ্টের মাধ্যমে কেবল একটি সাব শেল তৈরি করেছি, যেমন তিনি ( )
পুরো স্ক্রিপ্টের চারপাশে ব্রেস ব্যবহার করে তার উত্তরে দেখিয়েছিলেন .. তাঁর উত্তর খুব কাজ করে।
source $file_path argument
স্ক্রিপ্টটি একই শেলটিতে কার্যকর করা হচ্ছে যা থেকে আমি এটিকে ফোন করেছি (কী source
করে, আমাকে বলা হয়েছে ... এবং এর মতো কাজ করে) command || return
বিবৃতিগুলি টার্মিনালে আমি সম্পাদন করছি যে ফাইলটিতে রয়েছে