স্থানীয় কম্পিউটারে এবং ssh সেশনে PS1 আলাদাভাবে সেট করুন


9

আমি আমার হোম ডিরেক্টরিটি সংস্করণ নিয়ন্ত্রণের মধ্যে রাখি, যাতে আমার বেসিক কনফিগারেশনটি যে কোনও কম্পিউটারে সহজেই পাওয়া যায়।

আমার স্থানীয় কম্পিউটারে আমার বাশ কমান্ড প্রম্পট একটি জটিল, বর্ণময় জিনিস যা বর্তমান গিট সংগ্রহস্থল এবং এর রাজ্যকে অন্তর্ভুক্ত করে। তবে আমি user@host ~ $যখন sshএকটি দূরবর্তী মেশিনে প্রবেশ করি তখন একটি সাধারণ কমান্ড প্রম্পট চাইতাম ।

আমি আমার আপডেট করতে সক্ষম হতে চাই .profileযাতে এটি $PS1স্থানীয়ভাবে চলাকালীন একটি জটিল এবং একটি sshঅধিবেশন চলাকালীন সরলীকৃত একটি সেট আপ করে ।

মূলত, আমি $AM_I_LOGGED_IN_VIA_SSHআমার পরীক্ষায় ভেরিয়েবলের মতো কিছু চাই .profile। এটা কি সম্ভব?

উত্তর:


8

আপনি যখন এসএসএইচ দিয়ে লগইন করেন, বেশ কয়েকটি অতিরিক্ত পরিবেশের ভেরিয়েবল সেট হয়ে যায়। আপনি নিজের। প্রোফাইল এ আপনার PS1 সেট করার জন্য এটিকে পরীক্ষা হিসাবে ব্যবহার করতে পারেন।

if [ -n "$SSH_CLIENT" ]; then
    PS1="Via ssh: "
else
    PS1="Local: "
fi

7

আপনি আপনার পরিবেশ পরীক্ষা থাকেন ( env | grep SSH) আপনি যেমন বিভিন্ন জন পাবেন $SSH_CLIENT, $SSH_CONNECTIONএবং $SSH_TTY; সঠিক তালিকা sshdসংস্করণ উপর নির্ভর করবে ।


2

যদি আপনার এসএসডি দরকারী ভেরিয়েবলগুলি সরবরাহ না করে তবে আপনি ব্যবহার করতে পারেন

ps -p $PPID

বা $PPIDশেলটির প্যারেন্ট প্রসেসটি আপনার রিমোট-লগইন-প্রক্রিয়া কিনা তা দেখার জন্য বা অন্য কোনও র্যান্ডম পিএস ট্রিক (যদি আপনার শেলটি সেট না করে )। তারপরে যদি পিতামাতাই হ'ল দূরবর্তী-জিনিসটি স্যুইচ করুন $ PS1। এবং তারপরে ওপেনএসএইচ ডাউনলোড করুন এবং গীকোসর / কালেবের পরামর্শগুলি ব্যবহার করুন কারণ আপনার এসএসএস সার্ভারটি জঞ্জাল। ;)

অথবা, আপনি "কে আমি" আউটপুট ব্যবহার করতে পারেন, সর্বশেষ ক্ষেত্রটি (অর্থাত্‍ $( who am i | awk '$0=$NF')) দখল করতে পারেন এবং হোস্টটি কোনও স্থানীয় বা দূরবর্তী অবস্থান থেকে লগ ইন করেছেন কিনা তা নির্ধারণ করার জন্য কোনও দূরবর্তী বা স্থানীয় কিনা তা পরীক্ষা করে দেখতে পারেন।

অথবা $(hostname)আপনার শেলটি নির্দিষ্ট হোস্টগুলিতে উপযুক্ত $ PS1 ব্যবহার করার জন্য আপনি আউটপুটটি স্যুইচ করতে পারেন ।

অথবা, আসুন বাদাম যাই। যদি আপনি একটি আধুনিক শেল ব্যবহার করেন - যেমন ব্যাশ, ksh93, বা zsh, আপনি এই বাস্তবতার সাথে সুবিধা নিতে পারেন যে $ PS1 কার্যকর হওয়ার পরে পুনরায় মূল্যায়ন করা হয়েছে। সুতরাং, যদি আপনার সিডব্লিউডি সংগ্রহস্থলের মধ্যে থাকে এবং বাইরে অন্য কোনও কিছু থাকে তবে আপনি পাগল গিট স্টাফ করার জন্য একটি ইনলাইন শর্তযুক্ত ব্লক অন্তর্ভুক্ত করতে পারেন। উদাহরণস্বরূপ, আমি [[ conditional ]] && $( echo "whatever it should be if true) || $( echo "whatever should be the if-not-true prompt" )মূলতঃ আমি যে ডিরেক্টরিটি ব্যবহার করছি তার উপর নির্ভর করে আমার প্রম্পট পরিবর্তন করছি ।

default prompt$ PS1='$(id -un) @ $(hostname)$( [[ $(pwd) = /tmp ]] && echo " [I am in /tmp]" || echo " /not/in/tmp")$ '
myname @ host /not/in/tmp$ cd /tmp
myname @ host [I am in /tmp]$ cd /etc
myname @ host /not/in/tmp$

অবশ্যই, profile PS1 সংজ্ঞাটি আপনার প্রোফাইলে পাগল দেখাবে, তবে আপনি কেবল তখনই সুপার-রঙিন-গিট-স্টাফ পাবেন যখন আপনি অন্যদিকে অন্যদিকে নিয়মিত রঙ ছড়িয়ে রাখবেন while :) নোট করুন যে আপনাকে PS1 এসাইনমেন্টের চারপাশে একক উদ্ধৃতি ব্যবহার করতে হবে। পিএস 1 নির্ধারিত হওয়ার পরে আপনি ভেরিয়েবলগুলি প্রসারিত করতে চান না; যখন PS1 পরে মূল্যায়ন করা হয় আপনি সেগুলি প্রসারিত করতে চান। সুতরাং, একক উদ্ধৃতি।


1

যদি PermitUserEnvironmentএসএসডি-তে সক্ষম করা থাকে তবে আপনি ~/.ssh/environmentতৈরি করতে ব্যবহার করতে পারেন $PS1এবং তারপরে আপনার স্ক্রিপ্টে একটি মান উপস্থিত থাকে যা সাধারণত সেট করে।


0

Ignacio এর উত্তরের সংযোজন হিসাবে, বিষয়গুলি পরিষ্কার PermitUSerEnvironmentকরার জন্য, এই কাজ করার জন্য সার্ভারের পক্ষে বিকল্পটি সক্ষম করতে হবে। যদি সার্ভার এই বিকল্পটি সক্ষম না করে, আপনার সেই সার্ভারের সাথে রঙিন ssh সেশন হবে না।

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