ব্যাশে শেষ রিটার্ন মান কীভাবে অ্যাক্সেস করবেন?


69

সাধারণ দৃশ্য: আমি wsdlএকটি প্রকল্পের মাঝখানে হারিয়ে যাওয়া একটি ফাইল খুঁজছি ।

$ find -name '*.wsdl'
./some/very/very/long/way/to/some/lost/directory/filename.wsdl

এখন আমি জানি এটি কোথায়, আমি এই ফাইলটি দিয়ে কিছু করতে চাই, বলুন এটি সম্পাদনা করুন। আমার আদেশের পিছনে থাকা পথটি অনুলিপি / আটকানোর পরিবর্তে, findআগে ফিরে আসা পথটি ব্যবহার করা কি সম্ভব ? ঠিক তেমনি আপনার দ্বারা টাইপ করা সর্বশেষ যুক্তিটি অ্যাক্সেস করা সম্ভব !$বা আপনি সর্বশেষ আদেশটি দিয়ে !!
আমি পড়েছি যে এটি দিয়ে সম্ভব হয়েছিল $?, তবে এটি কেবল আমাকে একটি ত্রুটি প্রদান করে:0: command not found

$ echo $?
0: command not found

3
এটি রিটার্ন মান নয়, এটি আউটপুট!
মিরান্ডাভেরাক্রুজডিলেহোয়া কার্ডিনা

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

উত্তর:


33

কমান্ড প্রতিস্থাপনে কমান্ড চালান:

output=$( find -name '*.wsdl' )
echo "$output"

আউটপুটটি এখন outputভেরিয়েবলে সংরক্ষণ করা হয় যা আপনি নিজের পছন্দমতো বহুবার ব্যবহার করতে পারেন।


10
এটি সঠিক উত্তর নয়। $? হয়।
এমসিএমএলএক্সএক্সএক্সএক্সআইআইআইইআই

@ এমসিএমএলএক্সএক্সএক্সআইআই: $?পথগুলিতে নেই।
চোরোবা

1
আমার ক্ষমা, returnপ্রশ্নে শব্দটির অপব্যবহারের কারণে আমি বিভ্রান্ত হয়েছিলাম । আপনার উত্তর উপরের প্রশ্নের জন্য একেবারে সঠিক।
এমসিএমএলএক্সএক্সএক্সএক্সআইআইইআই

4
$?সর্বশেষ কমান্ডের প্রস্থান স্থিতি রয়েছে
ব্রেট ওয়াগনার

এই আমি উত্তর খুঁজছিলাম ছিল। আমি পূর্ববর্তী কমান্ডের আউটপুটটিতে আগ্রহী / সাফল্য / ব্যর্থ ফেরতের মান নয়। তাই আপনাকে ধন্যবাদ!
জোশুয়া পিন্টার

74

তার জন্য কোনও বিশেষ বাশ ভেরিয়েবল নেই।

$? শেষ কমান্ডের প্রস্থান কোড রয়েছে (0 = সাফল্য,> 0 = ত্রুটি-কোড)

আপনি পতাকাটির findসাহায্যে এই ফলাফলটি ব্যবহার করতে পারেন -exec:

 find -name  '*.wsdl' -exec emacs {} \;

{}ফাইলের নাম পাওয়া প্রতিস্থাপিত হয়েছে find। এটি প্রতিটি পাওয়া ফাইলের জন্য কমান্ড কার্যকর করবে। আপনি যদি সমস্ত পাওয়া ফাইলগুলির সাথে একটি কমান্ড কার্যকর করতে চান তবে আর্গুমেন্টগুলি +এটির মতো এটিকে ব্যবহার করে:

  find -name '*.wsdl' -exec emacs {} +

এটিতে পাওয়া সমস্ত ডাব্লুএসডিএল ফাইলের সাথে একটি ইম্যাক উদাহরণ খুলবে।

আরও সাধারণ সমাধান হ'ল আউটপুটটি ভেরিয়েবলের মধ্যে সঞ্চয় করা:

result=$(find -name '*.wsdl')
emacs $result

এটি কেবল সন্ধান না করে সমস্ত কমান্ডের সাথে কাজ করে। যদিও আপনি এটি ব্যবহার করতে পারেন xargs:

  find -name '*.wsdl' | xargs emacs {}

$?অন্য কমান্ডের প্রস্থান কোডটি ফেরানো কি সম্ভব ? যেমন পিং 1.1.1.1 -w 10; ফিরে $?
16

1
$?পূর্ববর্তী কমান্ডের প্রস্থান কোড রয়েছে, যা কিছু আছে। তাই উত্তর হবে হ্যাঁ.
আহিলসেন্ড

43

এখানে একটি দ্রুত হ্যাক যা সর্বনিম্ন কী-স্ট্রোকগুলি দিয়ে আপনি যা চান তা করা উচিত, যদি আপনি মনে করেন না যে শেষ কমান্ডটি দু'বার কার্যকর করা হয়েছে।

ব্যাকটিক ব্যবহার করুন, আলা:

`!!`

যেমন

আমি খুঁজে। - হার্ডডোফাইন্ড.টেক্সট নাম
কিছু / পাগল / পথ / থেকে / HardToFind.txt
$ ভিম `!!`

* সম্পাদনা: আমি উপরের লিঙ্কযুক্ত "সম্ভবত ডুপড" প্রশ্নটিতেও এই উত্তরটি অন্তর্ভুক্ত রয়েছে। এখনও এই এক সাথে সরাসরি প্রাসঙ্গিক, তাই এটি ছেড়ে, কিন্তু ডুপের জন্য দুঃখিত।


2
খুব চালাক. আমি মনে করি এটি গ্রহণযোগ্য উত্তর হওয়া উচিত কারণ এটি ইতিমধ্যে কমান্ডটি চালা না করা পর্যন্ত আপনাকে আউটপুট প্রয়োজন না জেনে সবচেয়ে সাধারণ ক্ষেত্রে সমাধান করে।
পল রুয়ান

1
আমি সম্মতি জানাই, আমি এখানেই এটি খুঁজছিলাম। পূর্ববর্তী লাইনে কিছু করা আমার উদ্দেশ্যকে হতাশ করে, পূর্ববর্তীভাবে সিদ্ধান্ত নিতে আমি শেষ ফেরত মান দিয়ে কিছু করতে চাই। ( git br | grepআমার ক্ষেত্রে আমি একটি শাখা খুঁজে পেয়েছি )
জ্যাক কেসি

আমার প্রিয় এক, এটি! ভাবেন আমি এটি প্রতিদিনের ভিত্তিতে করি।
মেটালগডউইন

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