আমি কীভাবে বলতে পারি (ইন ~/.bashrc
) যদি আমি ইন্টারেক্টিভ মোডে চলছি, বা বলি, ssh উপর একটি কমান্ড চালাচ্ছি। আমি .bashrc
যদি এএনএসআই অব্যাহতি সিকোয়েন্সগুলি পরে থাকে তবে মুদ্রণ এড়াতে চাই ।
আমি কীভাবে বলতে পারি (ইন ~/.bashrc
) যদি আমি ইন্টারেক্টিভ মোডে চলছি, বা বলি, ssh উপর একটি কমান্ড চালাচ্ছি। আমি .bashrc
যদি এএনএসআই অব্যাহতি সিকোয়েন্সগুলি পরে থাকে তবে মুদ্রণ এড়াতে চাই ।
উত্তর:
মতে man bash
:
পিএস 1 সেট করা হয়েছে এবং i - এতে বাশ ইন্টারেক্টিভ থাকলে আমি শেল স্ক্রিপ্ট বা একটি স্টার্টআপ ফাইলকে এই অবস্থার পরীক্ষা করার অনুমতি দেয় includes
সুতরাং আপনি ব্যবহার করতে পারেন:
if [[ $- == *i* ]]
then
do_interactive_stuff
fi
এছাড়াও:
লগইন শেল নয় এমন একটি ইন্টারেক্টিভ শেলটি শুরু করা হলে, বাশ /etc/bash.bashrc এবং ~ / .bashrc থেকে কমান্ডগুলি পড়ে এবং কার্যকর করে, যদি এই ফাইলগুলি উপস্থিত থাকে।
সুতরাং ~/.bashrc
শুধুমাত্র ইন্টারেক্টিভ শেল জন্য উত্সাহিত হয়। কখনও কখনও লোকেরা এটিকে উত্স থেকে থাকে ~/.bash_profile
বা ~/.profile
যা ভুল তা প্রত্যাশিত আচরণে হস্তক্ষেপ করে। আপনি যদি প্রচলিত কোডটির রক্ষণাবেক্ষণকে সহজ করতে চান তবে সাধারণ কোডটি ধারণ করতে আপনার একটি পৃথক ফাইল ব্যবহার করা উচিত এবং উভয় আরসি ফাইল থেকে এটি স্বাধীনভাবে উত্স করা উচিত।
লগইন rc
ফাইলগুলি যেমন স্ট্যান্ডআউট করার মতো কোনও আউটপুট না পাওয়া ~/.bash_profile
বা উদাহরণস্বরূপ ~/.profile
এটির যথাযথ ক্রিয়ায় হস্তক্ষেপ করতে পারে তবে সেরা rsync
।
যে কোনও ক্ষেত্রে, ভুল কনফিগারেশন উপস্থিত থাকতে পারে বলে ইন্টারঅ্যাক্টিভিটির জন্য পরীক্ষা করা এখনও ভাল ধারণা।
[[ $- =~ i ]] && echo interactive
i
~/.bash_profile
বা ~/.profile
যা ভুল তা প্রত্যাশিত আচরণের সাথে হস্তক্ষেপ করে । আপনি কি ~/.bashrc
থেকে সোর্সিং মনে করেন ~/.bash_login
? লগইন শেলটি ইন্টারেক্টিভ হওয়ার দরকার নেই বলে আমার ধারণা এটিও ভুল rect
ব্যবহার করুন:
if tty -s; then echo interactive; fi
test
সরঞ্জাম (মানুষ পাতা থেকে) এই জন্য চেক করতে পারেন:
-t FD True if FD is opened on a terminal.
সুতরাং আপনি উদাহরণস্বরূপ ব্যবহার করতে পারেন:
if [ -t 0 ] ; then
echo stdin is a terminal
.....
fi
অথবা
if [ -t 1 ] ; then
echo stdout is a terminal
fi
bash <<< 'test -t 0 && echo Y || echo X'
লিখেছেন Y
, bash -c 'test -t 0 && echo Y || echo X'
লিখেছেনX
আমি সাধারণত প্রোগ্রাম tty আউটপুট তাকান।
আপনি যদি টিটিটিতে থাকেন তবে এটি আপনাকে বলবে যে আপনি কোন টিটিতে আছেন। আপনি যদি ইন্টারেক্টিভ মোডে না থাকেন তবে এটি সাধারণত আপনাকে "টিটিটি নয়" বলে কিছু বলবে।