আমি কোনও আদেশ থেকে অক্ষরগুলি কীভাবে প্রেরণ করতে পারি যেমন তারা কোনও ফাইল থেকে এসেছে?


22

আমি কোনও আদেশ থেকে অক্ষরগুলি কীভাবে প্রেরণ করতে পারি যেমন তারা কোনও ফাইল থেকে এসেছে?

উদাহরণস্বরূপ আমি চেষ্টা করেছি:

wc < "apple pear orange"
-bash: apple pear orange: No such file or directory

উত্তর:



18

আরও দুটি পদ্ধতির (যা কোনও অতিরিক্ত প্রচেষ্টা ছাড়াই একাধিক-লাইন ইনপুটকে মঞ্জুরি দেয়):

  1. একটি "এখানে নথি" ব্যবহার করুন:

    c ডব্লিউসি << ইওএফ
    আপেল নাশপাতি কমলা
    ফাইলের শেষে
      1 3 18
    $

    EOFস্ট্রিং একটি বিভেদক হয়। আপনি যে কোনও স্ট্রিং ব্যবহার করতে পারেন; EOFকেবল একটি প্রচলিত পছন্দ।

  2. ইনপুট হিসাবে tty ব্যবহার করুন:

    $ ডব্লিউসি
    আপেল নাশপাতি কমলা
    Ctrl+ +D
      1 3 18
    $

    এটির ত্রুটি রয়েছে যে প্রোগ্রামটি চলমান শুরু হয় এবং আপনি নাম লেখার সাথে সাথে ইনপুটটি পড়া শুরু করেন। এটি উদ্বেগজনক হতে পারে; উদাহরণ স্বরূপ:

    p গ্রেপ v
    দ্রুত বাদামী শিয়াল              (টাইপড) 
    লাফিয়ে                       
    লাফিয়ে 
    উঠে (টাইপড) লাফিয়ে লাফিয়ে পড়ে                       (এটি গ্রেপ থেকে আউটপুট!) অলস কুকুরটি।                   (টাইপ করা)
    Ctrl + D
                                    (এখানে কোনও আউটপুট নেই) 
    $

রেকর্ডের জন্য: <<<ফর্মটি কোনও অতিরিক্ত প্রচেষ্টা ছাড়াই একাধিক-লাইন "ইনপুটকেও মঞ্জুরি দেয় , যেহেতু -বিহীন স্ট্রিংয়ে নতুন লাইন থাকতে পারে। অবশ্যই << EOFআপনার কাছে মাল্টি-লাইন ইনপুট থাকলে ফর্মটি (মূল এখানে-ডক সিনট্যাক্স) পড়া সহজ।
অ্যালেক্সিস

ম্যান পেজটি বলেছে যে এখানে স্ট্রিং সিনট্যাক্সটি হ'ল <<< word- অবশ্যই শেলের প্রসঙ্গে wordএকটি ফাঁকা স্ট্রিং এবং নিউলাইনগুলি সমেত একটি উদ্ধৃত স্ট্রিং হতে পারে! ডি আহা! এটি এতটাই স্পষ্ট যে এটি বলা ছাড়াই চলে যায় (এবং সত্যই, আমি এটি ম্যান পৃষ্ঠায় উল্লিখিত দেখি না)। :-( আমাকে এটি দেখানোর জন্য ধন্যবাদ!
জি-ম্যান বলে 22

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

@ অ্যালেক্সিস: যখন আমি এর মতো শীর্ষে চলে যাই এবং ইমোটিকন অন্তর্ভুক্ত করি তখন একজনের এই সম্ভাবনা বিবেচনা করা উচিত যে আমি বিদ্রূপ করছি।
জি-ম্যান বলছেন 'পুনরায় ইনস্টল করুন মনিকা'

10

যদিও এখানে বেশ কয়েকটি বৈধ সমাধান রয়েছে, অন্য একটি সিনট্যাক্স যা কখনও কখনও কার্যকর হতে পারে তা হল একটি কমান্ড চালানো <()। এটি আপনাকে কমান্ড লাইনে 1 টিরও বেশি ফাইল-বর্ণনাকারী অবজেক্ট তৈরি করতে দেয়।

আপনি যখন পাঠ্যের দীর্ঘ স্ট্রিংগুলির তুলনা করার মতো কিছু করছেন বা কোনও ফাইলে নেই এমন কিছু সামগ্রী আলাদা করতে চান তবে এটি কার্যকর হতে পারে।

উদাহরণস্বরূপ, হোস্ট ফাইলগুলি লোকালহোস্টে অনুলিপি না করেই দুটি নোডে হোস্ট ফাইলগুলির তুলনা করা:

diff -Naur <(cat /etc/hosts) <(ssh -q otherhost 'cat /etc/hosts')

<Stdin করার জন্য একটি ফাইল পুননির্দেশনা এবং ()প্রথম বন্ধনী মধ্যে কমান্ড চালানোর জন্য একটি subshell তৈরি করুন। এটি চালানো কমান্ডটির STDIN- এ দেওয়া সাব-শেল থেকে STDOUT।

এখানে একাধিক ডক ব্যবহার করার চেষ্টা করা বা চূড়ান্ত কমান্ডের পাইপলাইনে একাধিক কমান্ড প্রতিধ্বনিত করার চেয়ে কমান্ডে 1 টিরও বেশি ইনপুট "ফাইল" তৈরি করা সহজ উপায়।


<fileorpathnameস্টিডিন পুনর্নির্দেশ, কিন্তু <(subcmd)না; এটি এমন একটি নাম প্রতিস্থাপন করে যে প্রোগ্রামটি যখন / যখন খোলা হয় সাবসিএমডি থেকে স্টাডআউট পড়তে পারে। < <(subcmd)(স্থান প্রয়োজন) প্রায় এই জাতীয় ফাইলটি থেকে স্টিডিনকে পুনঃনির্দেশিত করে subcmd |। তোমার diffপড়তে পারি এক একজন যুক্তি নির্দিষ্ট করে stdin থেকে তার ইনপুট -কিন্তু উভয়েই নয়।
dave_thompson_085

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

1
আমার ডিফ উবুন্টু 16.04, এবং সোলারিস 11.2 সিস্টেমগুলিতে আমাকে পরীক্ষার জন্য বাশে ভাল কাজ করে। এটি সম্ভবত সমস্ত অপারেটিং সিস্টেমে সমস্ত শেলের জন্য কাজ না করে। এটি আসলে ফাইল বর্ণনাকারী তৈরি করছে যা সাবপ্রসেস থেকে আউটপুট পড়তে ব্যবহার করা যেতে পারে যেমন এটি কোনও ফাইল পড়ছিল reading যেহেতু ডিফ দুটি ফাইল যুক্তি গ্রহণ করে তাই এটি তৈরি করা ফাইল বর্ণনাকারীর মাধ্যমে উভয় উপ-প্রসেসের আউটপুট পড়তে এবং তাদের তুলনা করতে সক্ষম।
টিম কেনেডি

তুমি তোমার উত্তর এর মধ্যে পার্থক্য যোগ করতে চাইতে পারেন cmd <(cmd2 ...)এবং cmd < <(cmd2 ...)। প্রাক্তন ডাইরেক্টড ডেটা (cmd2 এর আউটপুট) ফাইলের নাম ব্যবহার করার অনুমতি দেয়। পরেরটি সমান cmd2 ... | cmd। স্পষ্টভাবে স্টিডিন ইনপুট গ্রহণ করতে কমান্ডগুলি লিখতে হবে এবং অনেকগুলি তা নয়। এটি শেল স্ক্রিপ্টগুলির ক্ষেত্রে বিশেষত সত্য।
ডকসালভেজার

8

আপনি একটি পাইপ ব্যবহার করতে পারেন

echo "apple pear orange" | wc

8
একটি পাইপ "ফাইল থেকে পড়া" সমান নয়। উদাহরণস্বরূপ আপনি কোনও পাইপে পিছন দিকে সন্ধান করতে পারবেন না, যেখানে আপনি কোনও ফাইলে যেতে পারেন।
rbialon

0

আপনি প্রত্যাশার মতো অনুরূপ কিছু ব্যবহার করতে চাইতে পারেন। রিমোট টেলনেট সেশন খোলার, প্রম্পটের জন্য অপেক্ষা করা, কিছু ডেটা প্রেরণ, প্রতিক্রিয়ার জন্য অপেক্ষা করা, ঘুম এবং প্রস্থান করার সহজ উদাহরণ নীচে দেওয়া হল।

#!/usr/bin/expect
spawn telnet localhost 8555
expect "Escape character is '^]'."
send "Hello World\n"
expect "Connection closed by foreign host."
sleep 1
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.