কোন প্যারামিটার পুনর্নির্দেশক অপারেটরের সাথে একটি আদেশে সরবরাহ করা হচ্ছে তা কীভাবে বলা যায়?


9

এইটা কাজ করে:

$ প্রতিধ্বনি "অবহিত করুন-পাঠান হেলো" | এখন

এটি করে না:

now এই মুহুর্তে <ইকো "হেল্লো অবহিত করুন"

এটি বলে 'ফাইল বা ডিরেক্টরি পাওয়া যায় নি "।

আমি বুঝতে পারি -fএই কমান্ডের একটি অপশন রয়েছে, যার সাহায্যে আমি একটি নির্দিষ্ট মুহুর্তে ফাইলটি কার্যকর করতে সরবরাহ করতে পারি।

সুতরাং এটি আমার চিন্তাভাবনা পেয়েছে ... সাধারণভাবে, আমি কীভাবে জানব যে কোনও প্যারামিটারের জন্য পুনর্নির্দেশ অপারেটররা মান সরবরাহ করে?


5
আপনার প্রশ্ন খুব পরিষ্কার নয়। "কোন প্যারামিটার" দ্বারা আপনি কী বোঝাতে চান? আপনার সমস্যাটি সম্ভবত আপনি (ভুল করে) এটি মনে করেন foo | barএবং bar < fooসমতুল্য। তারা না.
টেরডন

উত্তর:


16

আপনি এখানে দুটি ভিন্ন জিনিস ব্যবহার করছেন এবং তৃতীয়টি ব্যবহার করা উচিত। দেখা যাক:

  1. |: এটি পাইপ অপারেটর, এটি একটি প্রক্রিয়াটির আউটপুটকে অন্যটিতে ইনপুট হিসাবে পাস করতে সহায়তা করে:

    foo | bar

    এটি প্রোগ্রামটি চালায় এবং প্রোগ্রামের fooইনপুট হিসাবে এর আউটপুটটি পাস করে bar

  2. >, <, >>এবং <<, এরাই ফেরৎ অপারেটার তারা থেকে / ডেটা প্রেরণ করার পরিবেশন করা ফাইল :

    • foo > bar: প্রোগ্রামটি চালায় fooএবং তার আউটপুটটি ফাইলে সংরক্ষণ করে bar, 1 এর বিষয়বস্তুকে ওভাররাইট করে এবং এটি উপস্থিত না থাকলে তৈরি করে।

    • foo >> bar: প্রোগ্রামটি চালায় fooএবং তার আউটপুটটি ফাইলে সংরক্ষণ করে bar, এর বিষয়বস্তুগুলিতে সংযোজন এবং এটি উপস্থিত না থাকলে তৈরি করে।

    • foo < bar: রান করে foo, ফাইল থেকে ইনপুট পড়তে বলছে bar

    • <<যেহেতু একটি আদেশের জন্য "সংযোজন" ইনপুট কোন বিন্দু আছে, একটি বিশেষ ক্ষেত্রে দেখা যায়, <<প্রাথমিকভাবে (একচেটিয়াভাবে আমি যতদূর জানি) জন্য ব্যবহৃত এখানে ডকুমেন্টস :

      $ cat << EOF > file.txt
      > Hello World!
      > EOF

      << SomeStringHere > Out.fileশেষের স্ট্রিং ( EOFউপরের উদাহরণে) লক্ষ্য ফাইলটিতে না আসা পর্যন্ত কনস্ট্রাক্ট লিখিত সমস্ত পাঠ্য পুনর্নির্দেশ করবে । এখানে ডক্স আপনাকে সহজেই বহু-লাইন স্ট্রিংগুলিকে ফর্ম্যাট করতে দেয় এবং ভেরিয়েবল এবং বিশেষ অক্ষর অন্তর্ভুক্ত করে।

  3. <<<অপারেটর, এখানে স্ট্রিং , একটি এখানে দস্তাবেজের মত কিন্তু এটা ভেরিয়েবল বিস্তৃতি ঘটে। সুতরাং, উদাহরণস্বরূপ:

    grep foo <<< "$bar"

    কমান্ড উপরে সমতূল্য echo "$bar" | grep foo

  4. আপনি আসলে যা খুঁজছেন তাকে প্রসেস সাবস্টিটিউশন বলা হয় এবং কমান্ডের আউটপুট অন্যর কাছে পৌঁছে দেওয়ার অন্য উপায়। এটি গঠিত <(command)

    foo <(bar) 

    সুতরাং, আপনার atউদাহরণের জন্য, আপনি করতে পারেন

    at now < <(echo "notify-send HELLO")

    উপরের কাজগুলি কারণ প্রক্রিয়া প্রতিস্থাপনটি আসলে একটি ফাইল তৈরি করে (আরও তথ্যের জন্য উপরের লিঙ্কটি পড়ুন) এবং এটি সেই ফাইলটির ফাইল বর্ণনাকারীর সাথে পাস করা <হয় at now


1 ডিফল্ট আচরণ ওভাররাইট করা হয়, এটি noclobberবাশ করতে বিকল্প সেট করে পরিবর্তন করা যেতে পারে । যদি সেট করা থাকে echo foo > barতবে barউপস্থিত থাকলে ব্যর্থ হবে । সেক্ষেত্রে এর echo foo |> barপরিবর্তে এটি ব্যবহার করতে বাধ্য করা যেতে পারে । অধ্যায় 3.6.2 দেখুন এখানে


1
চমৎকার উত্তর! খুব পুঙ্খানুপুঙ্খভাবে (বিশেষত ফাইল পুনর্নির্দেশকের মধ্যে পার্থক্য সহ)
স্টিল্ড্রাইভার

@steeldriver ওহো এই, যা, ধন্যবাদ :) এবং তাই ছিল এই প্রশংসিত মণি অধীনে। আমি আশা করি আপনার সমাধানটি নীরবে এড়ানো যায় এমন প্রতিটি বিপর্যয়ের জন্য আমি আপনাকে একটি +1 দিতে পারতাম।
টেরডন

আপনি কি দয়া করে <<এবং <<<(যা তার উত্তরটিতে উল্লেখ করেছেন @ স্টাইল্ড্রাইভার) কিছু তথ্য অন্তর্ভুক্ত করতে প্রসারিত করতে পারেন । তদুপরি, আরও কিছু আছে - এর মতো >>>>>>বা কিছু <<<<<<<<<<?
আদিত্য

@ আদিত্য সম্পন্ন হয়েছে। এবং চিন্তা করবেন না, এটি বন্ধ হয়ে যায় <<<:)
টেরডন

12

এই ক্ষেত্রে, echo "notify-send HELLO"কোনও প্রক্রিয়া ফাইল নয় - সুতরাং আপনার ফাইল পুনঃনির্দেশের পরিবর্তে একটি প্রক্রিয়া বিকল্পের প্রয়োজন

at now < <(echo "notify-send HELLO")

সম্পূর্ণ কমান্ডটি এড়াতে আপনি এখানে স্ট্রিং ব্যবহার করতে পারেনecho

at now <<< "notify-send HELLO"

5
আপনি যে ধরণের প্রশ্ন পছন্দ করেন সেগুলি দেখে (আমি যা করি একইভাবে) আমি মনে করি আপনার ইউনিক্স এবং লিনাক্সে আরও কিছুটা সময় ব্যয় করা উচিত । আমরা সেখানে দুর্দান্ত শেল
ট্র্যাকের

@ ইটারডন: পার্ল গল্ফারদের জন্য একই জিনিস?
সিলভাইন পাইনাউ

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