কোন আউটপুট ছাড়া "সিডি -" ব্যবহার করুন


26

আমি কিভাবে চালানো হবে cd - কোন আউটপুট আউট echoing ছাড়া কমান্ড?
আমি চেষ্টা করেছিলাম cd - 2>&1 /dev/null কিন্তু যে গন্তব্য ডিরেক্টরি প্রিন্ট আউট।
এর কারণ হল আমি এটি একটি ব্যাশ ফাংশন ব্যবহার করতে চাই এবং অপ্রয়োজনীয় আউটপুট না চাই।

উত্তর:


29

এটি ভালো করে দেখুন:

cd - > /dev/null

আপনিও করতে পারেন:

cd - > uselessfile

এটি STDOUT এর পরিবর্তে আউটপুটটি "uselessfile" ফাইলটিতে পাঠাবে।

আপনি ফাইল তৈরি বা ওভাররাইট করার পরিবর্তে যোগ করতে পারেন।

cd - >> uselessfile

13

@ এরিওয়োক ইতোমধ্যেই প্রশ্নের জবাব দিয়েছেন , কিন্তু আসলে কী ঘটছে তা ব্যাখ্যা করে এবং আপনি যে আচরণটি করছেন তা আপনি কেন দেখছেন তা নিয়ে আমি স্টাব করব।

সমস্যা আপনার পুনর্নির্দেশ সঙ্গে হয়। তুমি লিখছ:

cd - 2>&1 /dev/null

যেহেতু পুনঃনির্দেশগুলি কমান্ড লাইনের মধ্যে যে কোন জায়গায় প্রদর্শিত হতে পারে (আপনি নিজের মতো কিছু সহজ করে নিশ্চিত করতে পারেন echo a b 2>&1 c </etc/fstab d ), পুনঃনির্দেশিত করা হয় আসলে পরে stripped হয়:

cd - /dev/null

সমস্যা দেখুন? আপনি দুটি আর্গুমেন্ট পাস করা হয় cd, এক যুক্তি এবং দুটি পুনঃনির্দেশনা। যেহেতু আপনি শুধুমাত্র এক সময়ে এক বর্তমান ডিরেক্টরি হতে পারে, cd শুধুমাত্র তার প্রথম যুক্তি বিবেচনা করে, এই ক্ষেত্রে যা -

সম্ভবত আপনি কি অভিপ্রেত লিখতে হয় একটি cd স্টਡਰ এবং স্টডাউটের উভয় পুনঃনির্দেশনার সাথে কমান্ড / dev / null। যে করতে দুটি উপায় আছে।

আপনার ক্ষেত্রে সহজতম কেবল একটি শেলটি অবহিত করতে হবে যা আপনি পুনঃনির্দেশকরণ চান > অক্ষর। @ এরিওয়াক এই পরামর্শ দিচ্ছে।

cd - 2>&1 >/dev/null

এটি প্রথমে স্ট্যডারর (ফাইল বর্ণনাকারী 2) ফাইল ডিস্ক্রিপ্টর 1 (স্টডাউট) তে পুনঃনির্দেশিত করে, তারপর stdout (অন্তর্নির্মিত 1) / dev / null তে পুনঃনির্দেশিত করে। উল্লেখ্য যে ক্রম গুরুত্বপূর্ণ; যদি আপনি পুনঃনির্দেশগুলি বিপরীত করেন তবে একই ফলাফল পাবেন না, তবে কিছু ক্ষেত্রে এটি প্রদর্শিত হতে পারে যে আপনি কীভাবে নির্দিষ্ট প্রোগ্রাম সম্পর্কিত আউটপুট স্ট্রীমগুলি ব্যবহার করেন।

বিকল্পভাবে, হিসাবে প্রস্তাব করা হয়েছে @demure , তুমি ব্যবহার করতে পার &> এই সিনট্যাক্সটি আপনার শেল দ্বারা সমর্থিত হলে উভয় প্রবাহ একবারে পুনঃনির্দেশিত করতে।

cd - &>/dev/null

নোট করুন যে এই বিকল্পের কোনো ত্রুটি এছাড়াও নীরব হবে $OLDPWD আর বিদ্যমান নেই, যেহেতু আপনি সিস্টেমের কালো গর্তে স্ট্যান্ডার্ড ত্রুটি আউটপুট পুনঃনির্দেশিত করছেন। যদি এটি একটি উদ্বেগ, আমি চেক করব $? পরে; এটি যদি সত্যিকারের উদ্বেগ হয় তবে আপনাকে অবশ্যই এটি নিশ্চিত করতে হবে, তবে অন্তত আমার পরীক্ষায় ব্যর্থ হওয়া উচিত cd (কিনা cd $someplace অথবা cd - ) সেট $? = 1 সাফল্যের পরে $? = 0


4

হয়তো আপনি ব্যবহার করতে পারেন

cd $OLDPWD

কিন্তু এই ক্ষেত্রে আপনি আরো টাইপিং প্রয়োজন হবে :)

কিন্তু আপনার একটি সুবিধা থাকবে: যদি কোনও ত্রুটি থাকে তবে বার্তাটি / dev / null তে পুনঃনির্দেশিত হবে না।


যদি $OLDPWD অনির্বাচিত, এই আপনি ড্রপ করা হবে ~cd - একটি ত্রুটি মুদ্রণ করা হবে (এবং সম্ভবত আপনি ইতিমধ্যে যেখানে আপনি ছেড়ে)।
a CVn

1
আপনি সঠিক না। যদি $ OLDPWD অনির্বাচিত হয় (কেন? ব্যবহারকারী এটি সেট করতে পারে না), 'সিডি -' তেমন ফলাফল "সিডি $ OLDPWD"। ম্যানুয়াল পৃষ্ঠাটি পরীক্ষা করুন ('সিডি -' সমান 'সিডি "$ OLDPWD" & amp; & amp; pwd')। অথবা আপনি এটি পরীক্ষা করতে পারেন :) 'OLDPWD = ""; সিডি - '- আপনি ড্রপ মধ্যে দেখতে পাবেন ~ এবং একটি অক্ষর মুদ্রণ।
uzsolt

আমি শুধু এটি পরীক্ষা। আমার সিস্টেম, ক্রম cd /tmp bash cd - বলেছেন bash: cd: OLDPWD not set দ্বিতীয় সিডি এ; যখন ক্রম cd /tmp bash cd $OLDPWD আপনি ~ drops ~ (প্রায় অবশ্যই $ OLDPWD একটি খালি স্ট্রিং বিস্তৃত কারণ)। cd $OLDPWD আপনি অন্তত এক সম্পন্ন একবার জরিমানা কাজ করবে cd শেল মধ্যে প্রশ্ন, কিন্তু আগে না।
a CVn

এইচএম, হ্যাঁ, আপনি ঠিক আছে। আমি zsh সঙ্গে পরীক্ষা করেছি এবং zsh সঙ্গে ত্রুটি বার্তা ড্রপ না।
uzsolt

1

পুনঃনির্দেশিত stdout এবং stderr: cd - &>/dev/null

দ্য &> সংক্ষিপ্ত হাতের সংস্করণ cd - 2>/dev/null 1>&2, যা আমি মনে করি যা আপনি বোঝাতে চেয়েছিলেন ...

  • বিঃদ্রঃ &> bash & gt; = 4.0 প্রয়োজন।

গীত। অধিকাংশ কমান্ড অবস্থান এ ইঙ্গিত করা যেতে পারে, তাই এটি আসলে আপনি প্রয়োজন সম্ভাবনা cd


0

তুমি ব্যবহার করতে পার:

cd ~-

ব্যাশ ম্যান পৃষ্ঠা অনুযায়ী Tilde Expansion:

যদি tilde-prefix একটি `~ - 'হয়, শেল পরিবর্তনশীল OLDPWD এর মানটি সেট করা থাকলে এটি প্রতিস্থাপিত হয়।

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