কেন rc.local আমার সমস্ত কমান্ড চালায় না এবং আমি এটি সম্পর্কে কী করতে পারি?


35

আমার কাছে নিম্নলিখিত rc.localস্ক্রিপ্ট রয়েছে:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

sh /home/incero/startup_script.sh
/bin/chmod +x /script.sh
sh /script.sh

exit 0

প্রথম লাইনটি startup_script.shআসলে তৃতীয় লাইনে উল্লিখিত script.shফাইলটি ডাউনলোড করে /script.sh

দুর্ভাগ্যক্রমে, দেখা যাচ্ছে যে এটি স্ক্রিপ্টটি কার্যকর করতে সক্ষম নয় বা স্ক্রিপ্টটি চালাচ্ছে না। rc.localসঠিকভাবে কাজ শুরু করার পরে ফাইলটি ম্যানুয়ালি চালানো । কি chmod শুরুতে চালানো যাবে না কিছু?

উত্তর:


70

আপনি একটি দ্রুত ফিক্সের নিচে সমস্ত উপায়ে যেতে পারেন তবে এটি সর্বোত্তম বিকল্প নয়। তাই আমি প্রথমে এই সমস্ত পড়ার পরামর্শ দিচ্ছি।

rc.local ত্রুটিগুলি সহ্য করে না

rc.localবুদ্ধি করে ত্রুটিগুলি থেকে পুনরুদ্ধার করার কোনও উপায় সরবরাহ করে না। কোনও কমান্ড ব্যর্থ হলে এটি চলমান বন্ধ করে দেয়। প্রথম লাইনটি, পতাকাটির #!/bin/sh -eসাথে চালিত শেলের মধ্যে এটি সম্পাদন করে -e-eপতাকা কি একটি স্ক্রিপ্ট তোলে (এই ক্ষেত্রে, হয় rc.local) প্রথমবার কমান্ড এটা মধ্যে ব্যর্থ চলমান থামাতে।

আপনি rc.localএইরকম আচরণ করতে চান যদি কোনও কমান্ড ব্যর্থ হয়, আপনি চান না যে এটি শুরু হওয়ার সাথে সাথে অন্য যে কোনও প্রারম্ভিক কমান্ড এটির উপর নির্ভর করে চলেছে with

সুতরাং যদি কোনও কমান্ড ব্যর্থ হয়, পরবর্তী কমান্ডগুলি চলবে না। এখানে সমস্যাটি হ'ল এটি /script.shচালানো হয়নি (এটি ব্যর্থ হয়নি, নীচে দেখুন), সুতরাং এটি ব্যর্থ হওয়ার আগে সম্ভবত কিছু কমান্ড। তবে কোনটি?

এটা ছিল /bin/chmod +x /script.sh?

না।

chmodযে কোনও সময় ঠিক আছে। প্রদত্ত ফাইল-সিস্টেম যেটি /binমাউন্ট করা ছিল, আপনি চালাতে পারেন /bin/chmod। এবং রান /binআগে মাউন্ট করা হয় rc.local

যখন রুট হিসাবে চালানো হয়, /bin/chmodখুব কমই ব্যর্থ হয়। এটিতে চালিত ফাইলটি কেবল পঠনযোগ্য হলে এটি ব্যর্থ হবে এবং এটির মধ্যে থাকা ফাইল সিস্টেমটি অনুমতিগুলি সমর্থন না করলে ব্যর্থ হতে পারে। না হয় সম্ভবত এখানে।

উপায় দ্বারা, sh -eহয় শুধুমাত্র কারণ এটি আসলে একটি সমস্যা হয়ে দাঁড়াবে কিনা chmodব্যর্থ হয়েছে। আপনি যখন কোনও স্ক্রিপ্ট ফাইল স্পষ্টভাবে তার দোভাষীকে অনুরোধ করে চালনা করেন, তখন ফাইলটি সম্পাদনযোগ্য হিসাবে চিহ্নিত কিনা তাতে কিছু আসে যায় না। এটি যদি বলে তবেই /script.shফাইলটির নির্বাহযোগ্য বিট ব্যাপার। যেহেতু এটি বলে sh /script.sh, এটি না (অবশ্যই /script.sh নিজেরাই কল না করে) এটি চালানোর সময় না, যা কার্যকর হতে না পারায় এটি ব্যর্থ হতে পারে, তবে এটি নিজেকে কল করার সম্ভাবনা কম)।

তাহলে কি ব্যর্থ?

sh /home/incero/startup_script.shব্যর্থ. প্রায় অবশ্যই.

আমরা জানি এটি দৌড়েছে, কারণ এটি ডাউনলোড হয়েছে /script.sh

(অন্যথায়, এটি চালানো হয়েছে কিনা তা নিশ্চিত করা গুরুত্বপূর্ণ, যদি কোনওরকম PATH/bin তে না থাকে - আপনি লগ ইন করার সময় আপনার কাছে যেমন ছিল তা অগত্যা নয় If যদি পথে না থাকতেন তবে এটি করতে হবে হিসাবে চালানো হবে । যেহেতু এটি চালানোর করেছিলেন রয়েছে , যার মানে আপনি অন্যান্য কমান্ডের যে মধ্যে অবস্থিত হয় চালাতে পারেন সম্পূর্ণরূপে তাদের নাম কোয়ালিফাইং ছাড়াই। উদাহরণস্বরূপ, আপনি শুধু চালাতে পারেন বদলে । যাইহোক, আপনার শৈলী সঙ্গে পালন ইন , আমি সমস্ত কমান্ডের জন্য পুরোপুরি যোগ্য নামগুলি ব্যবহার করেছি , যখনই আমি আপনাকে এটি চালানোর পরামর্শ দিই))rc.localPATH/binrc.localsh/bin/sh/binPATH/binchmod/bin/chmodrc.localsh

আমরা নিশ্চিত হতে পারি যে /bin/chmod +x /script.shকখনই দৌড়ায় নি (বা আপনি দেখতে পাবেন এটি /script.shকার্যকর হয়েছিল)। এবং আমরা জানিsh /script.sh চালানো হয় না।

তবে এটি ডাউনলোড হয়েছে /script.sh । সফল! কিভাবে এটি ব্যর্থ হতে পারে?

সাফল্যের দুটি অর্থ

কোনও আদেশ দুটি সফল হতে পারে যখন সে বলতে পারে কোনও আদেশ সফল হয়েছে:

  1. এটি আপনি যা করতে চেয়েছিলেন তা করেছে।
  2. এটি রিপোর্ট করেছে যে এটি সফল হয়েছে।

এবং তাই এটি ব্যর্থতার জন্য। কোনও ব্যক্তি যখন বলে যে কোনও আদেশ ব্যর্থ হয়েছে, তখন এর অর্থ হতে পারে:

  1. এটি আপনি যা করতে চেয়েছিলেন তা করে নি।
  2. এটি রিপোর্ট করেছে যে এটি ব্যর্থ হয়েছে।

sh -eযেমন চালানো কোনও স্ক্রিপ্ট rc.localপ্রথমবারের মতো কোনও কমান্ডের ব্যর্থতার রিপোর্টে চালানো বন্ধ করে দেয় । কমান্ডটি আসলে কী করেছিল তাতে কোনও পার্থক্য নেই।

startup_script.shব্যর্থতা রিপোর্ট করার উদ্দেশ্যে না করা ব্যতীত এটি যখন যা চায় তা করে, এটি একটি বাগ startup_script.sh

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

এটি ব্যর্থ হয়েছে যে রিপোর্ট করা বাদেstartup_script.sh এটি সম্ভবত যা করা উচিত সব কিছু করেছিল ।

সাফল্য বা ব্যর্থতা কীভাবে প্রতিবেদন করা হয়

স্ক্রিপ্ট শূন্য বা আরও কমান্ডের তালিকা। প্রতিটি কমান্ডের একটি প্রস্থান স্থিতি রয়েছে। ধরে নিই যে স্ক্রিপ্টটি চালাতে আসলে কোনও ব্যর্থতা নেই (উদাহরণস্বরূপ, দোভাষী যদি স্ক্রিপ্টটি চালনার সময় পরবর্তী লাইনটি পড়তে না পারেন), কোনও স্ক্রিপ্টের প্রস্থান স্থিতিটি হ'ল:

  • 0 (সাফল্য) স্ক্রিপ্টটি ফাঁকা থাকলে (যেমন কোনও আদেশ ছিল না)।
  • Nযদি স্ক্রিপ্ট কমান্ডের ফলে শেষ পর্যন্ত , যেখানে কিছু প্রস্থান কোড।exit NN
  • স্ক্রিপ্টে চলমান শেষ কমান্ডের প্রস্থান কোড otherwise

যখন একটি কার্যকর কার্যকর হয়, এটি তার নিজস্ব প্রস্থান কোডের প্রতিবেদন করে - এগুলি কেবল স্ক্রিপ্টগুলির জন্য নয়। (এবং প্রযুক্তিগতভাবে, স্ক্রিপ্টগুলি থেকে বেরিয়ে আসা কোডগুলি হ'ল চালানো শেলগুলি দ্বারা ফেরত প্রস্থান কোডগুলি))

উদাহরণস্বরূপ, যদি কোনও সি প্রোগ্রামটি শেষ হয় exit(0);, বা return 0;তার main()কার্যক্রমে, কোডটি 0অপারেটিং সিস্টেমকে দেওয়া হয়, যা এটি কলিং প্রক্রিয়াতে সরবরাহ করে (যা উদাহরণস্বরূপ, প্রোগ্রামটি চালানো শেল হতে পারে)।

0মানে প্রোগ্রাম সফল হয়েছে। অন্যান্য প্রতিটি সংখ্যা মানে এটি ব্যর্থ। (এইভাবে, বিভিন্ন সংখ্যা প্রোগ্রামটি ব্যর্থ হওয়ার কারণে বিভিন্ন ক্ষেত্রে উল্লেখ করতে পারে))

কমান্ড মিট টু ব্যর্থ

কখনও কখনও, আপনি ব্যর্থ হবে এই অভিপ্রায় সহ একটি প্রোগ্রাম চালান। এই পরিস্থিতিতে, আপনি এটির ব্যর্থতা সাফল্য হিসাবে ভাবতে পারেন, যদিও এটি কোনও প্রোগ্রাম নয় যে প্রোগ্রামটি ব্যর্থতার রিপোর্ট করে। উদাহরণস্বরূপ, আপনি rmযে ফাইলটি সন্দেহ করেছেন যে এটি ইতিমধ্যে বিদ্যমান নেই কেবলমাত্র তা মুছে ফেলা হয়েছে তা নিশ্চিত করতে আপনি এটি ব্যবহার করতে পারেন।

startup_script.shএটি চলমান বন্ধ হওয়ার ঠিক আগে, এরকম কিছু ঘটেছিল সম্ভবত । গত কমান্ড চালানোর জন্য লিপিতে সম্ভবত ব্যর্থতা প্রতিবেদন (যদিও তার "ব্যর্থতা" সম্পূর্ণই সূক্ষ্ম বা এমনকি প্রয়োজনীয় হতে পারে), যা স্ক্রিপ্ট প্রতিবেদন ব্যর্থতা তোলে।

পরীক্ষাগুলি ব্যর্থ

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

উদাহরণস্বরূপ, ধরুন আমি 4 টি 5 এর সমান কিনা ভুলে যাচ্ছি ভাগ্যক্রমে, আমি শেল স্ক্রিপ্টিং জানি:

if [ 4 -eq 5 ]; then
    echo "Yeah, they're totally the same."
fi

এখানে, পরীক্ষা [ -eq 5 ]ব্যর্থ হয়েছে কারণ এটি সর্বোপরি 4 ≠ 5 হয়। এর অর্থ এই নয় যে পরীক্ষাটি সঠিকভাবে সম্পাদিত হয়নি; ইহা কর. কাজটি 4 = 5 হয় কিনা তা যাচাই করা ছিল, তবে যদি সাফল্যের খবর দেওয়া হয়, এবং যদি না হয় তবে ব্যর্থতা।

আপনি দেখুন, শেল স্ক্রিপ্টিংয়ে, সাফল্যটি সত্যও বোঝাতে পারে এবং ব্যর্থতাও মিথ্যা বলতে পারে ।

যদিও echoবিবৃতিটি কখনও চালিত হয় না, ifসামগ্রিকভাবে ব্লকটি সাফল্যের সাথে ফিরে আসে।

তবে, আমি মনে করি আমি এটি আরও ছোট লিখেছি:

[ 4 -eq 5 ] && echo "Yeah, they're totally the same."

এটি সাধারণ শর্টহ্যান্ড। &&একটি বুলিয়ান এবং অপারেটর। উভয় পক্ষের সত্য (সাফল্য) না প্রত্যাখ্যান করে উভয় পক্ষের বিবৃতি &&নিয়ে গঠিত একটি অভিব্যক্তি &&মিথ্যা (ব্যর্থতা) প্রদান করে। ঠিক যেমন একটি স্বাভাবিক এবং

যদি কেউ আপনাকে জিজ্ঞাসা করে, "ডেরেক কি মলে গিয়ে প্রজাপতির কথা ভেবেছিল?" এবং আপনি জানেন যে ডেরেক মলে যান নি, আপনি যদি প্রজাপতির কথা ভেবে থাকেন তবে আপনাকে এটির চিন্তা করতে হবে না।

একইভাবে, যদি বাম দিকের কমান্ডটি &&ব্যর্থ হয় (মিথ্যা), সম্পূর্ণ &&এক্সপ্রেশনটি অবিলম্বে ব্যর্থ হয় (মিথ্যা)। ডানদিকে স্টেটমেন্ট &&কখনও চালানো হয় না।

এখানে, [ 4 -eq 5 ]রান। এটি "ব্যর্থ" (মিথ্যা প্রত্যাবর্তন)। সুতরাং পুরো &&এক্সপ্রেশন ব্যর্থ। echo "Yeah, they're totally the same."কখনও চালায় না। সবকিছু যেমনটি হওয়া উচিত তেমন আচরণ করা হয়েছে, তবে এই কমান্ডটি ব্যর্থতার খবর দেয় (যদিও ifউপরে বর্ণিত সমতুল্য শর্ত সাপেক্ষে সাফল্যের রিপোর্ট দেয়)।

যদি এটি কোনও স্ক্রিপ্টের সর্বশেষ বিবৃতি হয় (এবং স্ক্রিপ্টটি এর আগে কোনও সময়ে সমাপ্তির পরিবর্তে এটি পেয়ে যায়), পুরো স্ক্রিপ্টটি ব্যর্থতার খবর দেয়

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

shবনাম sh -e, পুনর্বিবেচিত

যেহেতু লাইন (এছাড়াও দেখুন এই প্রশ্নের উপরের) হয়েছে , অপারেটিং সিস্টেম স্ক্রিপ্টটি চালানোর যেন এটা আদেশের সঙ্গে প্রার্থনা করা হয়েছে:#!/etc/rc.localsh -e

sh -e /etc/rc.local

বিপরীতে, আপনার অন্যান্য স্ক্রিপ্টগুলি যেমন পতাকা ছাড়াইstartup_script.sh চালানো হয় :-e

sh /home/incero/startup_script.sh

ফলস্বরূপ তারা চালিয়ে যেতে থাকে এমনকি যখন তাদের মধ্যে কোনও আদেশ কোনও ব্যর্থতার কথা জানায়।

এটি স্বাভাবিক এবং ভাল। - না চালিত বেশিরভাগ স্ক্রিপ্ট সহ - এবং বেশিরভাগ অন্যান্য স্ক্রিপ্টগুলির rc.localসাথে আমন্ত্রণ জানানো উচিত ।sh -erc.local

পার্থক্যটি মনে রাখার বিষয়টি নিশ্চিত করুন:

  • স্ক্রিপ্টগুলি sh -eপ্রস্থান রিপোর্টিং ব্যর্থতার সাথে চালিত হয় যখন প্রথমবারের মধ্যে একটি কমান্ড থাকে তার কমান্ড থাকে ব্যর্থতার প্রতিবেদন থেকে বেরিয়ে আসে।

    এটি হ'ল স্ক্রিপ্টটি একক দীর্ঘ কমান্ড যা স্ক্রিপ্টের সমস্ত কমান্ড সমন্বিত করে &&অপারেটরদের সাথে যোগ দেয় ।

  • স্ক্রিপ্টগুলি sh(ছাড়া -e) দিয়ে চালিত হয় যতক্ষণ না তারা কোনও কমান্ড পায় যা এগুলি শেষ করে (বাইরে বেরিয়ে আসে) বা স্ক্রিপ্টের একেবারে শেষ পর্যন্ত। প্রতিটি কমান্ডের সাফল্য বা ব্যর্থতা মূলত অপ্রাসঙ্গিক (যদি না পরবর্তী কমান্ড এটি পরীক্ষা করে না)। স্ক্রিপ্টটি শেষ কমান্ড রানের প্রস্থান স্থিতি দিয়ে প্রস্থান করে।

আপনার স্ক্রিপ্ট বুঝতে এটির ব্যর্থতা মোটেও বুঝতে সহায়তা করা

যখন আপনার স্ক্রিপ্টটি ব্যর্থ হয়েছিল তখন তা ভাবতে বাধা দিতে পারেন কীভাবে?

এটি সঞ্চালনের ঠিক আগে কী ঘটে তা দেখুন look

  1. যদি কোনও কমান্ড সফল হয় যখন ব্যর্থ হয়, তা কেন খুঁজে বের করুন এবং সমস্যাটি ঠিক করুন।

  2. যদি কোনও কমান্ড ব্যর্থ হয়, এবং এটি হ'ল সঠিক জিনিস, তবে সেই ব্যর্থতার স্থিতিকে প্রচার থেকে বিরত করুন।

    • প্রচার থেকে ব্যর্থতার স্থিতি রাখার একটি উপায় হ'ল সফলভাবে সফল হওয়া আরেকটি কমান্ড চালানো। /bin/trueএর কোনও পার্শ্ব প্রতিক্রিয়া নেই এবং সাফল্যের খবর /bin/falseদেয় (ঠিক যেমন কিছুই করে না এবং ব্যর্থও হয়)।

    • আর একটি হ'ল স্ক্রিপ্টটি সমাপ্ত হয় তা নিশ্চিত করা exit 0

      exit 0স্ক্রিপ্টের শেষে থাকা একই জিনিসটি অগত্যা নয় । উদাহরণস্বরূপ, সেখানে কোনও ifব্লক থাকতে পারে যেখানে স্ক্রিপ্টটি ভিতরে প্রবেশ করে।

আপনার স্ক্রিপ্টটি সাফল্যের প্রতিবেদন করার আগে, ব্যর্থতার কারণ কী কারণ তা জানা ভাল। যদি এটি সত্যিই কোনওভাবে ব্যর্থ হয় (আপনি যা করতে চান তা না করার অর্থে), আপনি সত্যিকার অর্থে এটি সাফল্যের প্রতিবেদন করতে চান না।

একটি দ্রুত ফিক্স

যদি আপনি startup_script.shপ্রস্থান রিপোর্টিংয়ের সাফল্য অর্জন করতে না পারেন তবে আপনি rc.localযে কমান্ডটি চালায় সেটিকে পরিবর্তন করতে পারেন , যাতে সেই কমান্ডটি সাফল্যের খবর দেয় যদিও startup_script.shতা না হয়।

বর্তমানে আপনার কাছে রয়েছে:

sh /home/incero/startup_script.sh

এই কমান্ডের একই পার্শ্ব প্রতিক্রিয়া রয়েছে (যেমন চলমানের পার্শ্ব প্রতিক্রিয়া startup_script.sh) তবে সর্বদা সাফল্যের খবর দেয়:

sh /home/incero/startup_script.sh || /bin/true

মনে রাখবেন, কেন startup_script.shব্যর্থতা রিপোর্ট করে এবং এটি ঠিক করে রাখা ভাল।

কুইক ফিক্স কীভাবে কাজ করে

এটি আসলে একটি ||পরীক্ষা, একটি বা পরীক্ষার উদাহরণ

ধরুন আপনি জিজ্ঞাসা করুন আমি কি আবর্জনা বের করেছি বা পেঁচা ব্রাশ করেছি কিনা? আমি যদি আবর্জনা বের করে ফেলেছি তবে আমি পেঁচা ব্রাশ করেছি কিনা তা আমার মনে না থাকলেও আমি সত্যই "হ্যাঁ" বলতে পারি।

||রান বামে কমান্ড । যদি এটি সফল হয় (সত্য), তবে ডান হাতটি চালাতে হবে না। সুতরাং যদি startup_script.shসাফল্যের রিপোর্ট হয় তবে trueকমান্ডটি কখনই চালিত হয় না।

তবে, যদি startup_script.shরিপোর্টগুলি ব্যর্থ হয় [আমি আবর্জনা বের করিনি] , তবে /bin/true [যদি আমি পেঁচা ব্রাশ করে] তবে এর ফলাফল ।

/bin/trueসর্বদা সাফল্য ফিরে আসে (বা সত্য , যেমন আমরা কখনও কখনও এটি বলে থাকি)। ফলস্বরূপ, সম্পূর্ণ কমান্ড সফল হয় এবং পরবর্তী কমান্ডটি rc.localচলতে পারে।

সাফল্য / ব্যর্থতার উপরে একটি অতিরিক্ত নোট, সত্য / মিথ্যা, শূন্য / ননজারো।

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

এটি শেলের স্ক্রিপ্টারের জন্য সি জাতীয় প্রোগ্রামিং ভাষা গ্রহণের জন্য এবং সি প্রোগ্রামারদের শেল স্ক্রিপ্টিং গ্রহণের জন্য এটি আবিষ্কারের জন্য বিভ্রান্তির একটি বিষয়:

  • শেল স্ক্রিপ্টিং এ:

    1. একটি ফেরত মান 0মানে বিজয় এবং / অথবা সত্য
    2. ছাড়া অন্য কিছু একটা ফেরত মান 0মানে ব্যর্থতা এবং / অথবা মিথ্যা
  • সি প্রোগ্রামিংয়ে:

    1. মিথ্যা0 মানে একটি ফেরতের মান ..
    2. ছাড়া অন্য কিছু একটা ফেরত মান 0মানে সত্য
    3. সাফল্য বলতে কী বোঝায় এবং ব্যর্থতা যার অর্থ কোন সহজ নিয়ম নেই। কখনও কখনও 0সাফল্য বোঝায়, অন্য সময়গুলির অর্থ ব্যর্থতা, অন্য সময় এর অর্থ আপনি সবে যুক্ত দুটি সংখ্যার যোগফল শূন্য। সাধারণ প্রোগ্রামিংয়ে রিটার্ন মানগুলি বিভিন্ন ধরণের তথ্যের বিস্তৃত সংকেত দিতে ব্যবহৃত হয়।
    4. কোনও প্রোগ্রামের সংখ্যাগত প্রস্থান স্থিতি শেল স্ক্রিপ্টিংয়ের নিয়ম মেনে সাফল্য বা ব্যর্থতা নির্দেশ করে। এটি হ'ল যদিও 0আপনার সি প্রোগ্রামটিতে মিথ্যা অর্থ হওয়া সত্ত্বেও , আপনি এখনও 0যদি এটির সাফল্যের সাথে রিপোর্ট করতে চান তবে আপনার প্রোগ্রামটিকে তার প্রস্থান কোড হিসাবে ফিরিয়ে আনবে (যা শেলটি পরে সত্য হিসাবে ব্যাখ্যা করে )।

3
বাহ দুর্দান্ত উত্তর! আমি জানতাম না সেখানে সেখানে প্রচুর তথ্য রয়েছে res প্রথম স্ক্রিপ্টের শেষে 0 ফিরে আসার ফলে বাকী স্ক্রিপ্টটি কার্যকর হয়ে যায় (ভাল আমি বলতে পারি যে chmod + x দৌড়েছে)। দুর্ভাগ্যজনকভাবে দেখে মনে হচ্ছে আমার স্ক্রিপ্টের / usr / bin / wget স্ক্রিপ্ট.শগুলিতে রাখার জন্য কোনও ওয়েবপৃষ্ঠা পুনরুদ্ধার করতে ব্যর্থ হচ্ছে। আমি অনুমান করছি যে এই rc.local স্ক্রিপ্ট কার্যকর হওয়ার সময়কালে নেটওয়ার্ক প্রস্তুত নয়। আমি এই কমান্ডটি কোথায় রাখতে পারি যাতে নেটওয়ার্কটি শুরু হয়ে গেলে এবং স্বয়ংক্রিয়ভাবে শুরু হওয়ার পরে এটি চলতে পারে?
প্রোগ্রামার

আমি এই মুহুর্তে sudo ভিজুডো চালিয়ে, নিম্নোক্ত লাইনটি যুক্ত করে এটি 'হ্যাক' করেছি: ব্যবহারকারীর নাম ALL = (ALL) NOPASSWD: ALL 'স্টার্টআপ অ্যাপ্লিকেশনস' প্রোগ্রাম চালাচ্ছে (এর জন্য CLI কমান্ড কী?), এবং এতে স্টার্টআপ_স্ক্রিপ্ট যুক্ত করে, যদিও স্টার্টআপস্ক্রিপ্ট এখন রুট হিসাবে চালানোর জন্য আগে sudo কমান্ডের সাথে স্ক্রিপ্ট.শ চালায় (আর পাসওয়ার্ডের প্রয়োজন নেই)। সন্দেহ নেই এটি অত্যন্ত সুরক্ষিত এবং ভয়ানক, তবে এটি কেবলমাত্র একটি কাস্টম পিক্সে-বুট লাইভ ডিস্ট্রো ডিস্কের জন্য।
প্রোগ্রামার

@ স্টু 2000 ধরে নিচ্ছেন incero(আমি ধরে নিই যে এটি ব্যবহারকারীর নাম) যে কোনও উপায়ে প্রশাসক , এবং এইভাবে কোনও কমান্ড চালানোর অনুমতি দেওয়া হয় root(তাদের নিজস্ব পাসওয়ার্ড প্রবেশ করে), এটি অত্যন্ত সুরক্ষিত এবং ভয়ানক নয় । আপনি যদি অন্যান্য সমাধান চান তবে আমি এই সম্পর্কে একটি নতুন প্রশ্ন পোস্ট করার পরামর্শ দিচ্ছি । একটি সমস্যা হ'ল কেন কমান্ডগুলি rc.localচালিত হয়নি (এবং আপনি যদি এগুলি চালিয়ে যাওয়া চালিয়ে যান তবে কী ঘটবে তাও আপনি পরীক্ষা করে দেখেছিলেন)। এখন আপনার অন্যরকম সমস্যা রয়েছে: আপনি rc.localরান করার আগে মেশিনটি নেটওয়ার্ক-সংযুক্ত করতে চান , বা startup_script.shপরে চালানোর সময়সূচি নির্ধারণ করতে চান ।
এলিয়াহ কাগন

1
আমি তখন থেকে এই ইস্যুতে ফিরে এসেছি, rc.local সম্পাদনা করেছি এবং খুঁজে পেয়েছি যে উইজেট 'কাজ করে না'। /usr/bin/sudo service networking restartউইজেট কমান্ডের আগে স্টার্টআপ স্ক্রিপ্টে যুক্ত করার ফলে উইজেট তখন কাজ করে।
প্রোগ্রামার

3
@ এলিয়াকাগান দারুণ সুন্দর উত্তর। আমি কমই এ আপনি আরো ভালো ডকুমেন্টেশন জুড়ে এসেছিলrc.local
souravc

1

আপনি (ইউনিক্স রূপগুলিতে আমি ব্যবহার করি) পরিবর্তন করে ডিফল্ট আচরণকে ওভাররাইড করতে পারেন:

#!/bin/sh -e

প্রতি:

#!/bin/sh

স্ক্রিপ্টের শুরুতে। "-E" পতাকাটি sh কে প্রথম ত্রুটিতে প্রস্থান করার নির্দেশ দেয়। এই পতাকাটির দীর্ঘ নাম "এররেসিট", সুতরাং মূল লাইনটি সমান:

#!/bin/sh --errexit

হ্যাঁ, -eরাস্পবিয়ান জেসির উপর কাজ সরিয়ে ফেলা হচ্ছে ।
ওকি এরি রিনালাদি

-eএকটি কারণ জন্য নেই। আমি আপনি হলে আমি তা করতাম না। তবে আমি তোমার বাবা-মা নই।
Wyatt8740

-4

থেকে প্রথম লাইন পরিবর্তন করুন: #!/bin/sh -e থেকে !/bin/sh -e


3
এর সাথে সিনট্যাক্সটি #!সঠিক। (অন্তত, #!অংশ সঠিক। আর বাকি সাধারণত জন্য, এর ভাল কাজ করে rc.local।) দেখুন এই নিবন্ধটি এবং এই প্রশ্নেরযাইহোক, উবুন্টুকে জিজ্ঞাসা করুন স্বাগতম!
এলিয়াহ কাগন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.