আমি কীভাবে পর্দাটিকে স্ট্যান্ডার্ড বাশ শেলের মতো আচরণ করতে বলি?


37

লিনাক্সের স্ক্রিন কমান্ড সম্পর্কে সবেমাত্র শিখেছি - এটি প্রতিভা। আমি এটা ভালোবাসি. তবে, স্ক্রিনে প্রকৃত টার্মিনাল / প্রম্পটটি আমার স্ট্যান্ডার্ড বাশ প্রম্পটের চেয়ে আলাদা আচরণ করে looks অর্থাৎ, রঙগুলি এক নয়, ট্যাব সমাপ্তি কাজ করে না বলে মনে হচ্ছে, ইত্যাদি etc.

ব্যাশ প্রম্পটে ঠিক কীভাবে কোনও স্বাভাবিক (কমপক্ষে, আমি যা অভ্যস্ত তেমন স্বাভাবিক) এর মতো আচরণ করতে পর্দা বলতে পারি?

অতিরিক্ত তথ্য

আমি ম্যাক (টার্মিনাল) থেকে এসএসএসের মাধ্যমে একটি হেডলেস লিনাক্স বাক্সে (উবুন্টু) সংযোগ করছি। লগ ইন করার পরে, আমার কাছে আছে TERM=xterm-colorএবং আমি যখন স্ক্রিনটি চালাই TERM=screen

আমি $TERMপ্রথমে মানটি পরিবর্তন করতে পারি কিনা তা দেখতে নীচের পরামর্শগুলি চেষ্টা করে যাচ্ছি ।


কৌতূহলের বাইরে কেবল ওএস, এবং স্ক্রিন শুরু করার সাথে আপনার কী ধরণের টার্মিনাল রয়েছে? আমি অনুমান করতে পারি যে আপনার সমস্যাগুলির সাথে আপনার টার্মিনালের কিছু ভুল হয়েছে বা স্ক্রিনে ভুলভাবে চিহ্নিত করা উচিত।
জোরেডেচি

@ জোরেডেচে - আমি উপরের পোস্টে সেই তথ্যটি যুক্ত করেছি। ধন্যবাদ। ব্যাকস্পেস কীটি কাজ করার অনুমতি দেওয়ার জন্য আমাকে আমার টার্মিনালের সেটিংস সামঞ্জস্য করতে হয়েছিল ...
থর্নোমাদ ২

হ্যাঁ, আমি সত্যিই টার্মিনাল.এপ পছন্দ করি না। ব্যক্তিগতভাবে আমি প্রস্তাব দিচ্ছি যে আপনি বিকল্প দেখুন ( সার্ভারসফল্ট
প্রশ্নগুলি /

উত্তর:


38

এই পোস্টের জন্য ধন্যবাদ , আমি যা করেছি তা একটি লাইন যুক্ত করেছিল ~/.screenrc:

# ~/.screenrc
defshell -bash      # dash makes it a login shell

তারপরে আপনার ~/.bashrc, /etc/bashrcইত্যাদির জিনিসগুলি চালানো উচিত।


13

স্ক্রিনটি শব্দ-প্রকারে পরিবর্তিত হয় screen। আপনি দুটি কাজের একটি করতে পারেন:

  1. আপনার শব্দটি সেটিং পরিবর্তন করুন .screenrc
  2. পাশাপাশি আপনার .bashrcফাইলগুলি পরিবর্তন করুনTERM=screenTERM=xterm

4
ধন্যবাদ! আমি একটি $HOME/.screenrcফাইল তৈরি করেছি এবং এই লাইনটিকে শীর্ষে যুক্ত করেছি: term xterm-colorএবং ওয়া লা! রঙ প্রম্পট এবং $TERMমান মেলে। যাইহোক, কোনও ট্যাব-সমাপ্তি নেই ...
কাঁটানোমড

ট্যাব-সমাপ্তি কী ঘুরিয়ে দেয় তা আপনাকে খনন করতে হবে। ডিফল্ট শেল কনফিগারেশন স্ক্রিপ্টগুলি তার উপর ভিত্তি করে কী সক্ষম করে তা সম্পূর্ণরূপে সামঞ্জস্যপূর্ণ নয় $TERM; কিছু জিনিস এক্সটার্মের পাশাপাশি এক্সটার্ম-রঙের সাথে সক্ষম করবে, অন্যরা কেবল এক্সটার্মের সন্ধান করবে। অন্যান্য জিনিসগুলিতে অন্যান্য সুইচ রয়েছে।
স্ট্যাটিকসান

11

আপনি আপনার প্রশ্নটি যেভাবে লিখেছেন তা আমি পছন্দ করি, আমি নিজেও একই জিনিসটি জিজ্ঞাসা করছিলাম এবং এটি বের করতে কিছুটা সময় নিয়েছিল। আমি ইতিমধ্যে শেল আহ্বান সম্পর্কে কিছুটা জানার সৌভাগ্য হয়েছিল, তাই আমি বুঝতে পেরেছিলাম যে সমস্যাটি কোথাও রয়েছে।

এখানে আমার অনুসন্ধান আছে। প্রথমত, আমি ব্যক্তিগতভাবে এটি আকর্ষণীয় এবং লগইন শেল এবং একটি লগইনবিহীন শেলের মধ্যে পার্থক্যটি জানার জন্য উপযুক্ত মনে করি। একটি কি man $SHELLএবং আবাহন বিভাগে অনুসন্ধান এটি সম্পর্কে আরও পড়তে।

আপনি যদি shopt login_shellআপনার প্রম্পটে একটি ইস্যু করে এটির কোনও লগইন শেল বা লগ-ইন শেল না তা আপনার বর্তমান শেল উদাহরণটি জিজ্ঞাসা করতে পারেন । নোট করুন এটি সাধারণত একটি পঠনযোগ্য বিকল্প।

আমার ডেবিয়ান সিস্টেমগুলিতে screenসর্বদা লগইনবিহীন শেলগুলির সাথে খেলাপি হয়ে গেছে।

ওয়েবে অনুসন্ধান এবং পড়ার পরে man $SHELL, আমি কয়েকটি জিনিস পরীক্ষা করে দেখলাম এবং নিম্নলিখিত দুটি পন্থাগুলি আমার পক্ষে কাজ করেছে। ইন ~/.screenrcনিম্নরূপ অ্যাড / একটি লাইন আপডেট করুন:

shell -$SHELL

যদি এটি কার্যকর না হয় এবং আপনি ব্যবহার করছেন তবে bashআপনি সিউমাস দ্বারা ভাগ করে নেওয়া বিকল্পভাবে চেষ্টা করতে পারেন :

defshell -bash

উল্লিখিত হিসাবে, আপনি যদি আপনার বর্তমান শেল উদাহরণটি shopt login_shellআপনার প্রম্পটে জারি করে লগইন শেল হয় তা পরীক্ষা করতে পারেন ।


বর্তমান ডিরেক্টরিতে শেল লঞ্চ করার উপায় কি? আমি যা ইচ্ছা করি তার একটি উদাহরণ নিম্নরূপ cd ~/Projects ; screen ; pwd #=> ~/Projects। যাইহোক, shell -$SHELLআমার যোগ করার পরে আমি যা পাই তা ~/.screenrcহ'লcd ~/Projects ; screen ; pwd #=> ~/
rudolph9

9

আপনি কীভাবে বাশ চালাতে অভ্যস্ত তা নির্ভর করে আপনি লগইন শেলটি চালাচ্ছেন। আপনি যখন চালান screen, আপনি একটি অ-লগইন ইন্টারেক্টিভ শেল চালাচ্ছেন।

পার্থক্যটি হ'ল স্টার্টআপ স্ক্রিপ্টগুলি চালিত হয়।

  • /etc/bash.bashrcতারপরে ~/.bashrcযখন লগ-ইন না করা ইন্টারেক্টিভ শেলটি শুরু হয় তখন তা উত্সাহিত হয়

  • /etc/profileতারপর প্রথম পাওয়া ~/.bash_profile, ~/.bash_loginএবং ~/.profilesourced হয় একটি ইন্টারেক্টিভ লগ-ইন শেল শুরু হয়

এটি আপনাকে প্রভাবিত করতে পারে।

আমি $TERMআলাদা কিনা তাও পরীক্ষা করে দেখব ।


2

স্ক্রিন ব্যাশ প্রতিস্থাপন করে না, এটি এটি চালায় বা অন্য কোনও শেল। সম্ভবত এটি চলছে csh, zshবা bashবিভিন্ন পরামিতি সহ।

আমি প্রথমে যা চেষ্টা করব তা হ'ল এটি পরীক্ষা করা psএবং /proc/<pid>/cmdlineনিশ্চিত হওয়া যে এটি একই পরামিতিগুলির সাথে একই শেলটি ব্যবহার করছে login

এর পরে, /etc/screenrcফাইল man screenবিভাগে উল্লিখিত অন্য কোনও ফাইল চেক করুন ।


আমি একটি psকমান্ড চালিয়েছি এবং এটি দেখায় যে bashএটি চলছে (এটি পর্দার অভ্যন্তরে একটি পিএস কমান্ড) ... আমি রঙের কাজ পেয়েছি (উপরে) কেবল ট্যাব সমাপ্তি প্রয়োজন need
কাঁটানোমড

2

আমার একই সমস্যা ছিল, যখন আমি স্ক্রিনটি চালাতাম আমি কৃপণভাবে খুঁজে পেয়েছি শীতল PS1 রঙ প্রম্পটটি হারিয়েছি: পি।

ইস্যুটি হ'ল আমি it / .bash_ প্রোফাইলে এটিকে এভাবে চালাচ্ছিলাম

PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "

এর অর্থ হ'ল পর্দা যখন ব্যাশ_প্রফাইলে চলছিল তখন পিএস 1 চালানো হবে না।

স্থির করা সহজ: look। / Bash_ প্রোফাইলে PS1 বিবৃতিতে রফতানি যোগ করুন এর মতো দেখতে:

export PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "

এর মতো ভেরিয়েবল নেস্টেড এক্সিকিউশনে হারিয়ে যায় না।


1

"ডিফশেল -ব্যাশ" (যা আমি সবেমাত্র কয়েক মাস মাথা ছোঁড়ার পরে) সম্পর্কে কিছু যুক্ত করতে চাই। আপনি যখন এটি করেন, স্ক্রিন দ্বারা চালিত চাইল্ড শেলটিতে সাধারণত "/ বিন / ব্যাশ" এর পরিবর্তে "বাশ" তে সেট করা থাকে। তারপরে যদি আপনি আপনার স্ক্রিন সেশনের ভিতরে "স্ক্রিপ্ট" চালান, আপনি পাবেন:

$ script
Script started, file is typescript
script: failed to execute bash: No such file or directory

বা কমপক্ষে এটি আমার উবুন্টু 14.04 বাক্সে ঘটে। আমি যে কাজটি ব্যবহার করছি তা চালানো $ SHELL=/bin/bash script। আমি ধারণা করব $ ভুল সেট করা অন্য জিনিসগুলি ভেঙে ফেলবে, তবে স্ক্রিপ্টটি আমি লক্ষ্য করেছি।


0

.profileকোনও শেল ইনিশিয়ালাইজেশন শুরু হওয়ার আগে আমি আমার এই স্নিপেটটি ব্যবহার করছি : which screen > /dev/null 2>&1 && { screen -q -ls if [ $? -gt 10 ]; then read -p "$(tput setaf 2)Found a running SCREEN sesion, attach?$(tput sgr0)[Y/n] " y >&2 if [ "${y:-y}" = "y" -o "$y" = "Y" ]; then screen -aDR && logout fi else echo "$(tput setaf 3)No running SCREEN sessions found.$(tput sgr0)" >&2 fi }

তারপরে, যদি কোনও স্ক্রিন সেশন চলছে না, আমি ... ভাল, আমি স্ট্যান্ডার্ড শেল প্রম্পটে পড়ি না। sudoপাসওয়ার্ডের জন্য আরও একটি প্রম্পট রয়েছে (যেহেতু আমি সার্ভারটি পরিচালনার জন্য লগইন করেছি 99% সাল থেকে), এবং যদি আমি একটি দীর্ঘ কাজ সম্পাদনের পরিকল্পনা করি তবে আমি sudo লগইন বাতিল করি, আমার ব্যবহারকারীর অধিবেশনটিতে ম্যানুয়ালি পর্দা প্রবর্তন করব এবং সেখানে sudo করব।

এখানে মূল পয়েন্টটি হ'ল "কোনও শেল ইনিশিয়ালাইজের আগে", যাতে আপনার যদি ইতিমধ্যে একটি চলমান স্ক্রিন সেশন থাকে, এটি ইতিমধ্যে স্থানীয় এবং অন্যান্য স্টাফ দিয়ে আরম্ভ করা হয় এবং আপনাকে এটি আবারও করতে হবে না।

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