কেন লিনাক্স ওয়াল কমান্ড একটি স্ট্রিং আর্গুমেন্ট সম্প্রচার করবে না?


13

আমি এখানে পড়েছি এটি কাজ করা উচিত, কিন্তু এটি না:

# usage: wall [file]
root@sys:~> mesg
is y

root@sys:~> wall "who's out there"
wall: can't read who's out there.

যদি mesgসেট করা থাকে তবে yআমাকে স্ট্রিং সম্প্রচার করা থেকে বাধা দিচ্ছে কি? দ্রষ্টব্য, আমি নিশ্চিত করেছি যে ফাইল বিকল্পটি কাজ করে:

root@sys:~> wall test
Broadcast Message from root@sys (/dev/pts/1) at 15:23 ... 
Who's out there?

উত্তর:


21

সমস্যাটি লিঙ্কযুক্ত নিবন্ধে ব্যবহৃত সিনট্যাক্সের মধ্যে রয়েছে। ঠিক কী ভুল হয় তা বোঝার জন্য আসুন একবার দেখে নেওয়া যাক man wall:

এর থেকে ব্যবহার man wall:

wall [file]

Wall displays the contents of file or, by default, its standard input

সুতরাং এর বার্তার জন্য দুটি উত্সের মধ্যে দুটিই wallগ্রহণ করে

ফাইল নামের যুক্তি

প্রদত্ত যে কোনও কমান্ড লাইন আর্গুমেন্টের wallএকটি ফাইলের নাম হতে হবে। যুক্তিটি বার্তা বা ফাইলের নাম হিসাবে বোঝানো হয়েছে কিনা তা বলার কোনও নির্ভরযোগ্য উপায় না wallথাকায় এটি পরবর্তীকালে ধরে নেওয়া হবে, স্ট্যান্ডার্ড ইনপুটটিতে আসা কোনও কিছুকে উপেক্ষা করবেন এবং সেই ফাইলটি থেকে বার্তাটি পড়ার চেষ্টা করবেন।

প্রদত্ত ক্ষেত্রে এটি ফাইল থেকে পড়ার চেষ্টা করে who's out thereএবং এটি খুঁজে পায় না। নোট করুন যে কোনও ফাইল থেকে পড়া সাধারণত সুপারসারের মধ্যে সীমাবদ্ধ থাকে। আপনি যদি কোনও wall "who's out there"অনিবদ্ধ ব্যবহারকারী হিসাবে মৃত্যুদন্ড কার্যকর করতেন তবে সম্ভবত এর ফলাফলটি হত,wall: will not read who's out there - use stdin.

স্ট্যান্ডার্ড ইনপুট

যদি এটির কমান্ড লাইনে কোনও ফাইল নামের যুক্তি না পায় তবে এটি স্ট্যান্ডার্ড ইনপুট থেকে পড়া শুরু করবে। কমান্ডের স্ট্যান্ডার্ড ইনপুটটিতে তথ্য ফিড করার বিভিন্ন উপায় রয়েছে। একটি হ'ল ইউনিক্স পাইপ ব্যবহার করা । একটি পাইপলাইন তার বাম দিকের সাইড কমান্ডের স্ট্যান্ডার্ড আউটপুটটিকে তার ডানহাইড-সাইড কমান্ডের স্ট্যান্ডার্ড ইনপুটটির সাথে সংযুক্ত করবে:

$ echo "who's out there" | wall

অন্য উপায় হ'ল এখানে নথি ব্যবহার করা । এ here documentহ'ল শেল কনস্ট্রাক্ট যা একটি স্ট্রিং (তার নিজস্ব লাইনে নির্দিষ্ট প্রান্ত চিহ্নিতকারী অবধি) সরাসরি কমান্ডের স্ট্যান্ডার্ড ইনপুটটিতে চলে যায়, একটি পৃথক কমান্ডের মধ্যবর্তী পদক্ষেপ ছাড়াই আউটপুট উত্পাদন করে:

$ wall << .
who's out there?
.

এটি "এখানে দলিলগুলির অকেজো ব্যবহার" হবে, কারণ ডিফল্টরূপে টার্মিনালটি স্বয়ংক্রিয় wallস্ট্যান্ডার্ড ইনপুটটির সাথে সংযুক্ত wallথাকবে এবং যতক্ষণ না এটি ফাইলের শেষের অক্ষর ( Ctrl+D) প্রাপ্ত করে ততক্ষণ থেকে এটি পড়া শুরু করবে :

$ wall
who's out there?
^D

সমৃদ্ধ হোমোলকা মন্তব্যে যেমন উল্লেখ করেছেন, কিছু শাঁস সমর্থন করে here stringsযা কমান্ড বা শেষ চিহ্ন ছাড়াই আক্ষরিক স্ট্রিং পাস করতে দেয়:

$ wall <<< "who's out there?"

সমস্ত কিছু wallস্ট্যান্ডার্ড ইনপুটটিতে কিছু খাওয়ায় । পার্থক্য হ'ল একটি পাইপলাইন অন্য কমান্ডের আউটপুটটিকে এর সাথে সংযুক্ত করে, here documentsএবং here stringsসরাসরি স্ট্রিংটি পাস করে। এখানে দ্বিতীয়টির সুবিধাটি একটি নান্দনিক, কারণ echoপাইপের উদাহরণ থেকে প্রাপ্ত আদেশটি শেল অন্তর্নির্মিত কমান্ড, সুতরাং এটি wallসমস্ত ক্ষেত্রে শেলটির ইনপুট সরবরাহ করবে ।


1
echo xxx | yyyবাক্সwall <<<'your message'
রিচ

আমি সেই এক ধনী সম্পর্কে নিশ্চিত নই - প্রাচীরের বাক্য গঠনটি শেলের উপর ভিত্তি করে তৈরি করা উচিত নয় যতক্ষণ না। আমিও ব্যাশ ব্যবহার করি
এমবিবি

আপনাকে ধন্যবাদ পেথ - এটি শিখতে আমার প্রয়োজন সেই সিনট্যাক্টিকাল সংস্থাটি!
এমবিবি

আমার ভুল ধনী! পেথের স্পষ্টতার সাথে আমি এখন দেখতে পাচ্ছি যে আপনি wall <<< stringসিনট্যাক্স অফার করেছিলেন । এটা বেশ দুর্দান্ত। আপনারা উভয়ই <<<ঠিক কী কাজ করছে তা ব্যাখ্যা করতে পারেন (এবং কেন পেথ বলেছিলেন এটি আরও কার্যকর হবে)? আমি এটি অদ্ভুত বলে মনে করি যে একটি সেন্টিমিডি যার জন্য একটি ফাইলের প্রয়োজন হয় তার পরে স্ট্রিং গ্রহণ করতে পারে <<<। আবার ধন্যবাদ.
এমবিবি

1
@ এমজেবি এটি ইস্ট্রোস্ট্রিং প্রতিধ্বনির চেয়ে বেশি দক্ষ হওয়ার সম্ভাবনা কমই রয়েছে - হরস্ট্রিংগুলি একটি অস্থায়ী ফাইল তৈরি করে কাজ করে এবং তারপরে প্রক্রিয়াটির স্টিডিন (ফাইল বর্ণনাকারী 0) হিসাবে সংযুক্ত করে, কেন wallএটি এটি গ্রহণ করে (প্রাচীর স্ট্যান্ডিন থেকে পড়ে যদি আপনি না করেন তবে ' টি একটি ফাইল নির্দিষ্ট করুন)। হেরস্ট্রিংগুলি একটি ফাইল তৈরি করে যাচাই করার একটি উপায় হিসাবে, এর $ readlink /proc/self/fd/0 <<< testমতো কিছু মুদ্রণ করা হবে /tmp/sh-thd-4228536315 (deleted)
স্টুয়ার্ট পি। বেন্টলে 21

0

রুট দিয়ে চেষ্টা করুন

root@username:~# wall /home/username/yourfile_name 

যদি আপনার ফাইলটি হোম ডিরেক্টরিতে থাকে অন্যথায় অন্য কোনও পথ চেষ্টা করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.