কমান্ড যা শূন্য স্থিতি নিয়ে উপস্থিত হয় (/ বিন / সত্য নয়)?


11

আমি একটি মেকফাইল পেয়েছি যা একটি সরঞ্জাম চালায় যা কিছুটা সময় নেয়; এটি আমাকে ব্যবহৃত কমান্ডটি প্রতিস্থাপন করতে দেয়:

make TOOL=alternative-tool

আমি মেকফিলের এই পদক্ষেপটি এড়িয়ে যেতে চাই, তাই আমি একটি কমান্ড খুঁজছি যা স্ট্যাটাস 0 এর সাথে উপস্থিত হয় এবং এর স্বল্প পার্শ্ব-প্রতিক্রিয়া রয়েছে।

স্পষ্টতই, আমি কেবল ব্যবহার করতে পারি true, তবে এটি বিভ্রান্তিকর:

make TOOL=true

এটি পড়তে পারে যেন আমি সরঞ্জামটি চালাতে চাই তবে তা করি না।

সেখানে কি কোনও ডিফল্ট-ইনস্টলড এক্সিকিউটেবল যা /bin/trueস্ট্যাটাস 0 এর সাথে প্রস্থান করে না এবং এর একটি আকর্ষণীয় এবং সহজেই টাইপ করা যায়নি নাম?


মেকফিলগুলি মন্তব্যগুলি সমর্থন করে, gnu.org/software/make/manual/html_node/Makefile-Contents.html । লাইনের আগে একটি মন্তব্য দিন এবং আপনার কোডটি নথিভুক্ত করুন। এটি বিভ্রান্তি হ্রাস করে এবং ব্যাখ্যা করে যে আপনি কেন একটি নির্দিষ্ট পদ্ধতির ব্যবহার করেছেন।
ফ্রেইইট

1
কি রেখা? TOOL=trueযখন করতে, সম্ভবত কাছাকাছি একটি README মধ্যে নথিভুক্ত invoking কমান্ড লাইন হতে হবে। আসল লাইনটি যে সরঞ্জামটি আহ্বান করে তা হ'ল কোথাও 7000-লাইন (তৃতীয় পক্ষের) মেকফিলের মধ্যে।
রজার লিপসক্বে

উত্তর:


42

যদিও আপনি "কিছু নয় /bin/true" এমন কিছু চেয়েছিলেন , trueপুরো নামটির পরিবর্তে /bin/trueএটি দেখানোর জন্য যে এটি true"সত্য" এর অন্য কোনও অর্থের চেয়ে সম্ভবত সম্ভবত সবচেয়ে ভাল সমাধান show

আপনার উদ্বেগ যে trueইন

make TOOL=true

কমান্ডের নাম বাদে অন্য কিছু বলে মনে হচ্ছে। তবে লিখলে

make TOOL=/bin/true

তাহলে তা নিস্পষ্টভাবে একটি আদেশ command কেউ কেউ অন্যথায় TOOL=trueঅন্য কোথাও হাতিয়ার করার অর্থ বোঝাতে ভুল বোঝাতে পারে , তবে এরকম কোনও অপ্রকাশের TOOL=/bin/trueসম্ভাবনা নেই।


আমি :কখনই কোন শেল অন্তর্নির্মিত তবে বাহ্যিক কমান্ড নয় এটি সম্পর্কে নিশ্চিত । Henning Makholm হয়েছে রিপোর্ট এটা কাজ মনে হচ্ছে । তবে আমি মনে করি এটি সমস্ত পরিস্থিতিতে কার্যকর হয় না এবং আপনি দেখতে পেয়েছেন যে এটি আপনার পক্ষে কার্যকর হয়নি

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


1
ব্যবহার :আমার জন্য ভাল কাজ বলে মনে হচ্ছে। makeপ্রতিটি কমান্ডের নিজস্ব বিকল্পগুলি সম্পন্ন করার পরে সর্বদা শেল চালায় sp
এইচএমখোলম মনিকার

@ হেনিংমখোলম ধন্যবাদ, আমি সম্পাদনা করেছি। আপনি একটি উত্তর পোস্ট করতে পারেন। লোকসভা লাম চেঙ ছিল প্রশ্নে মন্তব্য সুপারিশ :, কিন্তু এটা একটা উত্তর হওয়া উচিত (বিশেষ করে সঠিক হলে) এবং যে মন্তব্য ব্যাখ্যা না কেন তা কাজ আশা করা উচিত নয়। hello.cকোনও মেকফাইলের সাথে নেই এমন কোনও ডিরেক্টরিতে যেখানে make helloসংকলন করা hello.cহয়েছে সেখানে helloআমি make CC=: helloযা বলছি তার অনুসারে আচরণ করতে দেখেছি ।
এলিয়াহ কাগান

2
দুর্ভাগ্যক্রমে, এই নির্দিষ্ট মেকফিলের জন্য (এটি erlang.mk ব্যবহার :করে ) ব্যবহার করে কাজ করে না। সম্পর্কে সুস্পষ্ট /bin/trueহওয়া সম্ভবত এটি করার সর্বোত্তম উপায়।
রজার লিপসক্বে

7

যদিও আমি সম্মত হই যে পুরো পথটি ব্যবহার trueকরা সর্বোত্তম সমাধান হতে পারে, আমি সত্যই কমান্ড কার্যকর করা এড়াতে সবচেয়ে সাধারণ উপায় সম্ভবত কোনটি নোট করতে চাই: echoএর সামনে একটি স্টিক লাগানো । তাই:

make TOOL=echo

আমি মনে করি এটি কখনও কখনও কার্যকর হয় যখন এটি গুরুত্বপূর্ণ মনে করিয়ে দেওয়া হয় যে TOOLঅন্যথায় যা করা হবে তা দমন করে । ছাড়াই -sবা সমতুল্য, makeঅপ্রয়োজনীয় তথ্য নির্গত করে কারণ উভয় makeএবং echoকমান্ড makeপৃথকভাবে নির্গত আউটপুট দ্বারা চালিত হয় । উদাহরণস্বরূপ, আমি যখন make CC=echo helloকোনও ডিরেক্টরিতে চালিত করি hello.cএবং এতে কোনও মেকফিল নেই, আমি echo hello.c -o helloআউটপুটের প্রথম লাইন এবং hello.c -o helloদ্বিতীয় হিসাবে পাই । তবে কিছু বিল্ডগুলি ব্যবহার করে (বা ব্যবহারকারী যুক্ত করতে পারে) -sএবং তারপরে এটি সহায়ক। make -s CC=echo helloশুধু দেয় hello.c -o hello
এলিয়াহ কাগান

(এখনও উপযোগী হতে যা পারে কমান্ড শেল প্রসারণও জড়িত, তাই আপনি কি চালানো হচ্ছে সে সম্পর্কে একটা পরিষ্কার ধারণা পেতে পারেন, আগ্রহী হলে)
muru

5

আপনি সর্বদা আপনার নিজের কমান্ডটি তৈরি করতে পারেন যা শূন্য প্রস্থান স্থিতি ফিরিয়ে দেওয়া ছাড়া কিছুই করে না। কিছু বিকল্প:

  • একটি উপযুক্ত নাম প্রতীকী লিঙ্ক /bin/true

  • একটি খালি শেল স্ক্রিপ্ট

  • প্রায় খালি সি প্রোগ্রাম:

    int main() {
        return 0;
    }

এই জাতীয় প্রোগ্রামের জন্য একটি ভাল নাম হ'ল নোপ বা কোনও বিকল্প নেই।
Arp

0

ওয়ার্কিং ডিরেক্টরিতে / বিন / সত্য নামের মতো কিছুতে প্রতীকী লিঙ্ক তৈরি করুন skip। সুতরাং ...

skip -> /bin/true

তারপরে মেক লাইনটি হতে পারে ...

make TOOL=./skip

-2

আরও কিছুটা অক্ষরের সাথে এটি করার একটি উপায় এখানে রয়েছে:

function T() { /bin/true; }

একবার এটি করার পরে আপনি কেবল নামটি ব্যবহার করে এটি পুনরায় সম্পাদন করতে পারবেন T

false; T; echo $?

3
আপনি কী দয়া করে ব্যাখ্যা করতে পারেন কীভাবে এই ফাংশনটি একটি পরিবর্তনশীল মান তৈরি করুন (প্রশ্নে পরিস্থিতিতে ব্যবহারের জন্য) হতে পারে?
ডেভিড ফোরস্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.