প্রোগ্রামের যুক্তিগুলি সঠিকভাবে পড়তে শুরু করা


18

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

আমি যে নির্দিষ্ট ত্রুটিটি পাচ্ছি তা হ'ল কমান্ডের ব্যবহারের পাঠ্যটি সিস্টেম লগ এ ফেলে দেওয়া। এটি থেকে আমি প্লিস্টের অন্যান্য তথ্য (কমান্ডের দিকে যাওয়ার সময়, সময় ইত্যাদি) অনুমান করি যে কমান্ডের বিকল্পগুলি নয়, সঠিকভাবে পার্স করা হচ্ছে।

কমান্ড ব্যবহারের পরে আমার একটি শেষ লাইন রয়েছে:

18/11/2013 09:30:00.101 com.apple.launchd.peruser.501: (fake.lable.seti[33833]) Exited with code: 1

তবে এর অর্থ কেবল "আমি একটি ত্রুটি নিয়ে বেরিয়ে এসেছি"।

আমি জানি যে কমান্ডটি তার বিকল্পগুলি থেকে বিভক্ত করেছে এবং ম্যান পৃষ্ঠাতে আপনাকে প্রোগ্রামআরগমেন্টস সম্পর্কে বলেছে: "... দয়া করে নোট করুন: অনেক লোক এই কী দ্বারা বিভ্রান্ত হয়েছেন। দয়া করে খুব সাবধানে এক্সিকিউপি (3) পড়ুন!"

আচ্ছা আমি এক্সিকিউপি পড়ি (3) এবং আমি বুদ্ধিমান কেউ নই, তাই আমি আপনাকে অনেক সুন্দর জিজ্ঞাসা করছি।

সাধারনত, টার্মিনাল থেকে কমান্ডটি চালানো এটিকে দেখতে দেখতে পছন্দ করবে:

/Library/Application\ Support/BOINC\ Data/boinccmd --host localhost --passwd gobbledygook --project http://setiathome.berkeley.edu/ update

এটি একটি ট্রিট কাজ করে।

এবং এইভাবেই আমি আমার লঞ্চএজেন্ট প্লাস্টের প্রোগ্রাম / প্রোগ্রামআরগমেন্ট বিভাগে এটি ভাগ করেছি:

<key>Program</key>
    <string>/Library/Application Support/BOINC Data/boinccmd</string>
<key>ProgramArguments</key>
    <array>
        <string>--host localhost</string>
        <string>--passwd gobbledygook</string>
        <string>--project http://setiathome.berkeley.edu/ update</string>
    </array>

(রেকর্ডের জন্য, আমি মূলত বোইনসিসিএমডি-এর জন্য পালাতে পেরেছিলাম \ তবে তা কার্যকর হয় না, লঞ্চটি আপনার জন্য ফাঁকা স্থানগুলি পালিয়ে যায়)

আমি আরও যুক্তিগুলি আরও বিভক্ত করার চেষ্টা করেছি:

<key>Program</key>
    <string>/Library/Application Support/BOINC Data/boinccmd</string>
<key>ProgramArguments</key>
    <array>
        <string>--host</string>
        <string>localhost</string>
        <string>--passwd</string>
        <string>gobbledygook</string>
        <string>--project</string>
        <string>http://setiathome.berkeley.edu/</string>
        <string>update</string>
    </array>

তবে সেটিও কাজ করে বলে মনে হচ্ছে না।

বরাবরের মতো, আমি খুব নিশ্চিত যে আমি এত সাধারণ কিছু অনুপস্থিত।

ধন্যবাদ।


উত্তর:

প্রোগ্রামআরগমেন্টগুলির প্রথম লাইনে প্রোগ্রামটির পথ হওয়া দরকার। এটিই আমাকে ট্রিপ করে যাচ্ছিল এবং সম্ভবত "... ... দয়া করে খুব মনোযোগ দিয়ে পড়ুন! .." মন্তব্য :) আমি এটিও পেয়েছি যে আমাকে যুক্তিগুলি তাদের উপাদানগুলির মধ্যে বিভক্ত করতে হয়েছিল। আমার যখন সমস্ত কিছু জায়গায় ছিল তখন পুরো জিনিসটি একটি কবজ কাজ করে। আপনাকে অনেক ধন্যবাদ.

<key>Program</key>
    <string>/Library/Application Support/BOINC Data/boinccmd</string>
<key>ProgramArguments</key>
    <array>
        <string>/Library/Application Support/BOINC Data/boinccmd</string>
        <string>--host</string>
        <string>localhost</string>
        <string>--passwd</string>
        <string>gobbledygook</string>
        <string>--project</string>
        <string>http://setiathome.berkeley.edu/</string>
        <string>update</string>
    </array>

এটি কেন হওয়া উচিত সে সম্পর্কে সহজেই ব্যাখ্যাটি বোঝার জন্য একটি চূড়ান্ত সম্পাদনা, স্যারপাভ্লোভার ব্যাখ্যাটি দেখুন।

~ ওয়াট


লঞ্চক্টেল তালিকা com.label.plist ব্যবহার করে আমি দেখতে পাচ্ছি যে লঞ্চড কমান্ডের সঠিক অংশগুলি একসাথে টুকরো টুকরো করে পাচ্ছে। আমি ভাবছিলাম এটি সম্ভবত সম্পর্কিত সমস্যা ছিল - তবে দৃশ্যত তা নয়।
উডজি

1
আপনার সমস্যার উত্তর আমার কাছে নেই, তবে আপনার প্রথম উদাহরণটি <string>--host localhost</string>অবশ্যই কার্যকর হবে না । মনে রাখবেন, আপনি যখন শেলটিতে একটি কমান্ড লাইন লেখেন, কোনও বিকল্পের অংশ এবং নিয়মিত যুক্তি কী তা কোনও ধারণা নেই - এটি প্রোগ্রামটি চালিত হওয়ার আগে আর্গুমেন্টগুলি পাস করার আগে স্পেসে বিভক্ত হয় । এছাড়াও, আপনি যদি সঠিক ত্রুটিটি boinccmdরিপোর্ট করছেন তা দেখাতে সহায়তা করতে পারে ।
কেভিন রেড

আমি যা দেখছি তা বলতে আমার পোস্ট সম্পাদনা করেছেন। এটি কোনও উপকারে আসবে না! এছাড়াও, আমি যদি তাদের হোয়াইটস্পেসে বিকল্পগুলি বিভক্ত করি তবে আমি একই ত্রুটি পাচ্ছি। আমি অনুমান করছি যে এটি - যা কোনওভাবে সমস্যা তৈরি করছে।
উডজি

1
আমি কেবল প্রোগ্রাম বা প্রোগ্রামআরগমেন্টগুলি উভয়ই ব্যবহার করার চেষ্টা করব
ব্যবহারকারীর 151019

উত্তর:


19

Programনির্ধারণ ফাইল চালানো, & ProgramArgumentsকী আর্গুমেন্ট যা নির্বাহ প্রক্রিয়া পাস হবে নির্দিষ্ট করে। দৃrict়ভাবে বলতে গেলে আপনি কোনও প্রক্রিয়াতে যে কোনও যুক্তিই পাস করতে পারেন তবে কনভেনশনটি হ'ল প্রথমটি নাম হওয়া উচিত যার মাধ্যমে প্রক্রিয়াটি শুরু হয়েছিল, তাই বেশিরভাগ প্রোগ্রাম তাদের প্রথম যুক্তি উপেক্ষা করে। চালানো ফাইল স্পষ্টত প্রয়োজনীয় তথ্য, কিন্তু যদি Programহয় মূল অনুপস্থিত, launchd ভান করে প্রথম আর্গুমেন্ট মানেরই ProgramArguments সুবিধার্থে বিশুদ্ধরূপে

আপনার প্রথম উদাহরণটি boinccmd শুরু করে এবং এটি আর্গুমেন্ট দেয় যা টার্মিনাল কমান্ডের সমতুল্য

--host\ localhost --passwd\ gobbledygook --project\ http://setiathome.berkeley.edu/\ update

যা Boinccmd কে বলেছে যে আপনি এটিকে "- হোস্ট লোকালহোস্ট" হিসাবে আখ্যায়িত করেছেন এবং কেবল এটি দুটি অদ্ভুত যুক্তি দিয়েছিলেন।

আপনার দ্বিতীয় উদাহরণটি আর্গুমেন্টগুলি সঠিকভাবে পৃথক করে, তবে এডি কেলির পরামর্শ অনুসারে এর সামনে একটি সন্নিবেশ করা প্রয়োজন। এটি Boinccmd কে বলেছে যে আপনি এটিকে "- হোস্ট" হিসাবে ডেকেছেন, তার পরে আরও ছয়টি যুক্তি পাস করেছেন। বোইনসিসিএমডি সর্বশেষ পাঁচটিকে দুটি বিকল্প হিসাবে স্বীকৃতি দিতে পারে তবে "লোকালহোস্ট" ব্যবসাটি কী তা সম্পর্কে কোনও ধারণা নেই। Boinccmd যতদূর বলতে পারে এটি টার্মিনাল থেকে অনুরোধ করা হয়েছিল

/Library/Application\ Support/BOINC\ Data/boinccmd localhost --passwd gobbledygook --project http://setiathome.berkeley.edu/ update

(অনুপস্থিত "- হোস্ট" নোট করুন)।

বোইনসিসিএমডি সম্ভবত এমন একটি বৃহত সংখ্যাগরিষ্ঠ প্রোগ্রাম যা তাদের প্রথম তর্কটি কী তা বিবেচনা করে না, তাই আপনি সম্ভবত অ্যারের <string>HELLO</string>মাথার দিকে ProgramArgumentsঝুঁকতে পারেন, তবে সম্ভবত এটি Programপুরোপুরি মুছে ফেলা এবং কেবল এটি ব্যবহার করুন:

<key>ProgramArguments</key>
    <array>
        <string>/Library/Application Support/BOINC Data/boinccmd</string>
        <string>--host</string>
        <string>localhost</string>
        <string>--passwd</string>
        <string>gobbledygook</string>
        <string>--project</string>
        <string>http://setiathome.berkeley.edu/</string>
        <string>update</string>
    </array>

এটি অর্থহীন অপ্রয়োজনীয় মনে হতে পারে তবে কিছু প্রোগ্রাম এটিকে ভাল প্রভাব হিসাবে ব্যবহার করে: বাশ এট আল। লগইন শেল হিসাবে কাজ করুন যদি তাদের প্রথম যুক্তিটি শুরু হয় -, এবং ভিম তার প্রথম যুক্তিটি edবা তার viপরিবর্তে বিভিন্ন এমুলেশন মোডে প্রবেশ করে vim


1
আমি আমার প্রধান পোস্ট সম্পাদনা করার সময় আপনি পোস্ট করেছেন! এটি একটি দুর্দান্ত ব্যাখ্যা। ধন্যবাদ.
উডজি


@ সিরপাভলোভা, দুর্দান্ত সাহায্য! তবে, এমন কোনও সরঞ্জাম রয়েছে যা ব্যক্তিটিকে কনসোলের অনুরোধকে প্লাস্ট ফর্ম্যাটে রূপান্তর করতে সহায়তা করে?
gauussblurinc

6

এক্সিকিউট (3) এর ম্যান পৃষ্ঠার উপর ভিত্তি করে, মনে হচ্ছে প্রথম প্রোগ্রামের যুক্তিটি কার্যকর হতে পারে:

The execv(), execvp(), and execvP() functions provide an array of pointers to null-terminated strings
 that represent the argument list available to the new program.  The first argument, by convention,
 should point to the file name associated with the file being executed. The array of pointers must be
 terminated by a NULL pointer.

আপনি যদি সূচক 0 তে আর্গুমেন্ট হিসাবে এক্সিকিউটেবলের পথটি নির্দিষ্ট করতে পারেন তবে এটি সহায়তা করতে পারে ...


আমি যেমন পোস্টটি সম্পাদনা করার জন্য সম্পাদনা করেছি তেমনি boinccmd সন্ধান করা এবং চালানো হচ্ছে, এতে অপশনগুলি দেওয়া হচ্ছে কোনওরকমে ম্যাঙ্গাল করা হচ্ছে। আপনি যা বলছেন তা যদি না মিস করি।
উডজি

1
@ উডগি হ্যাঁ যা প্রোগ্রামে পাওয়া গিয়েছিল - আপনার প্রোগ্রামঅরগমেন্টগুলি ভুল আছে এটির জন্য নির্বাহকের পাথের নাম প্রয়োজন
ইউজার 151019

উহু. উহু! আমার মনে হয় আমি এখন দেখছি। থাক, লেম টেস্ট যে।
উডজি

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