আমি কোনও আদেশ থেকে অক্ষরগুলি কীভাবে প্রেরণ করতে পারি যেমন তারা কোনও ফাইল থেকে এসেছে?
উদাহরণস্বরূপ আমি চেষ্টা করেছি:
wc < "apple pear orange"
-bash: apple pear orange: No such file or directory
আমি কোনও আদেশ থেকে অক্ষরগুলি কীভাবে প্রেরণ করতে পারি যেমন তারা কোনও ফাইল থেকে এসেছে?
উদাহরণস্বরূপ আমি চেষ্টা করেছি:
wc < "apple pear orange"
-bash: apple pear orange: No such file or directory
উত্তর:
শাঁস সমর্থন যে এখানে স্ট্রিং সহ bash, zshএবং ksh93, আপনি ব্যবহার করতে পারেন
wc <<< "apple pear orange"
আরও দুটি পদ্ধতির (যা কোনও অতিরিক্ত প্রচেষ্টা ছাড়াই একাধিক-লাইন ইনপুটকে মঞ্জুরি দেয়):
একটি "এখানে নথি" ব্যবহার করুন:
c ডব্লিউসি << ইওএফ আপেল নাশপাতি কমলা ফাইলের শেষে 1 3 18 $
EOFস্ট্রিং একটি বিভেদক হয়। আপনি যে কোনও স্ট্রিং ব্যবহার করতে পারেন; EOFকেবল একটি প্রচলিত পছন্দ।
ইনপুট হিসাবে tty ব্যবহার করুন:
$ ডব্লিউসি আপেল নাশপাতি কমলা Ctrl+ +D 1 3 18 $
এটির ত্রুটি রয়েছে যে প্রোগ্রামটি চলমান শুরু হয় এবং আপনি নাম লেখার সাথে সাথে ইনপুটটি পড়া শুরু করেন। এটি উদ্বেগজনক হতে পারে; উদাহরণ স্বরূপ:
p গ্রেপ v দ্রুত বাদামী শিয়াল (টাইপড) লাফিয়ে লাফিয়ে উঠে (টাইপড) লাফিয়ে লাফিয়ে পড়ে (এটি গ্রেপ থেকে আউটপুট!) অলস কুকুরটি। (টাইপ করা) Ctrl + D (এখানে কোনও আউটপুট নেই) $
<<<ফর্মটি কোনও অতিরিক্ত প্রচেষ্টা ছাড়াই একাধিক-লাইন "ইনপুটকেও মঞ্জুরি দেয় , যেহেতু -বিহীন স্ট্রিংয়ে নতুন লাইন থাকতে পারে। অবশ্যই << EOFআপনার কাছে মাল্টি-লাইন ইনপুট থাকলে ফর্মটি (মূল এখানে-ডক সিনট্যাক্স) পড়া সহজ।
<<< word- অবশ্যই শেলের প্রসঙ্গে wordএকটি ফাঁকা স্ট্রিং এবং নিউলাইনগুলি সমেত একটি উদ্ধৃত স্ট্রিং হতে পারে! ডি আহা! এটি এতটাই স্পষ্ট যে এটি বলা ছাড়াই চলে যায় (এবং সত্যই, আমি এটি ম্যান পৃষ্ঠায় উল্লিখিত দেখি না)। :-( আমাকে এটি দেখানোর জন্য ধন্যবাদ!
word(ওরফে "টোকেন") হিসাবে "শেল দ্বারা একটি একক হিসেবে বিবেচনা বর্ণের একটি ক্রম" র manpage সংজ্ঞায়িত করা হয়, এবং আপনাকে জানাতে চাই যে উদ্ধৃতিচিহ্ন সহ পংক্তি (প্রাসঙ্গিক অর্থে "একটি একক" হিসাবে গণ্য হয় পরে প্রয়োজন ইত্যাদি ব্যাকস্ল্যাশ প্রক্রিয়াকরণের পরিবর্তনশীল সম্প্রসারণ "কিন্তু প্রকৃতপক্ষে যে (একক কোট এছাড়াও সম্প্রসারণ থেকে রক্ষা করা।) এর ডাবল উদ্ধৃতি শেল পুরো উদ্দেশ্য শেল এর প্রক্রিয়াকরণ মডেল খুব ভাল চিন্তা করা হয়, এবং কিছুই কিন্তু
যদিও এখানে বেশ কয়েকটি বৈধ সমাধান রয়েছে, অন্য একটি সিনট্যাক্স যা কখনও কখনও কার্যকর হতে পারে তা হল একটি কমান্ড চালানো <()। এটি আপনাকে কমান্ড লাইনে 1 টিরও বেশি ফাইল-বর্ণনাকারী অবজেক্ট তৈরি করতে দেয়।
আপনি যখন পাঠ্যের দীর্ঘ স্ট্রিংগুলির তুলনা করার মতো কিছু করছেন বা কোনও ফাইলে নেই এমন কিছু সামগ্রী আলাদা করতে চান তবে এটি কার্যকর হতে পারে।
উদাহরণস্বরূপ, হোস্ট ফাইলগুলি লোকালহোস্টে অনুলিপি না করেই দুটি নোডে হোস্ট ফাইলগুলির তুলনা করা:
diff -Naur <(cat /etc/hosts) <(ssh -q otherhost 'cat /etc/hosts')
<Stdin করার জন্য একটি ফাইল পুননির্দেশনা এবং ()প্রথম বন্ধনী মধ্যে কমান্ড চালানোর জন্য একটি subshell তৈরি করুন। এটি চালানো কমান্ডটির STDIN- এ দেওয়া সাব-শেল থেকে STDOUT।
এখানে একাধিক ডক ব্যবহার করার চেষ্টা করা বা চূড়ান্ত কমান্ডের পাইপলাইনে একাধিক কমান্ড প্রতিধ্বনিত করার চেয়ে কমান্ডে 1 টিরও বেশি ইনপুট "ফাইল" তৈরি করা সহজ উপায়।
<fileorpathnameস্টিডিন পুনর্নির্দেশ, কিন্তু <(subcmd)না; এটি এমন একটি নাম প্রতিস্থাপন করে যে প্রোগ্রামটি যখন / যখন খোলা হয় সাবসিএমডি থেকে স্টাডআউট পড়তে পারে। < <(subcmd)(স্থান প্রয়োজন) প্রায় এই জাতীয় ফাইলটি থেকে স্টিডিনকে পুনঃনির্দেশিত করে subcmd |। তোমার diffপড়তে পারি এক একজন যুক্তি নির্দিষ্ট করে stdin থেকে তার ইনপুট -কিন্তু উভয়েই নয়।
cmd <(cmd2 ...)এবং cmd < <(cmd2 ...)। প্রাক্তন ডাইরেক্টড ডেটা (cmd2 এর আউটপুট) ফাইলের নাম ব্যবহার করার অনুমতি দেয়। পরেরটি সমান cmd2 ... | cmd। স্পষ্টভাবে স্টিডিন ইনপুট গ্রহণ করতে কমান্ডগুলি লিখতে হবে এবং অনেকগুলি তা নয়। এটি শেল স্ক্রিপ্টগুলির ক্ষেত্রে বিশেষত সত্য।
আপনি প্রত্যাশার মতো অনুরূপ কিছু ব্যবহার করতে চাইতে পারেন। রিমোট টেলনেট সেশন খোলার, প্রম্পটের জন্য অপেক্ষা করা, কিছু ডেটা প্রেরণ, প্রতিক্রিয়ার জন্য অপেক্ষা করা, ঘুম এবং প্রস্থান করার সহজ উদাহরণ নীচে দেওয়া হল।
#!/usr/bin/expect
spawn telnet localhost 8555
expect "Escape character is '^]'."
send "Hello World\n"
expect "Connection closed by foreign host."
sleep 1