জিএনইউ স্ক্রিনটি 10.5.8 এ আমার পথের উত্তরাধিকারী হবে না


11

আমি আমার টার্মিনাল প্রয়োজনের জন্য প্রতিদিনের ভিত্তিতে পর্দা ব্যবহার করি এবং আমি এটিতে বেশ খুশি। সম্প্রতি, যদিও, আমি কিছু আপডেট আমার ব্যাশ কনফিগারেশন ফাইল তৈরি করা এবং আমি লক্ষ্য করেছি যে, আমি বিভিন্ন অস্ত যাবার সময় PATHউপাদানের ( PATH, MANPATH, INFOPATH2 স্থানে, ইত্যাদি)। ফাইলগুলি যা হওয়া উচিত তা হ'তে আমি তাদের পরিবর্তন করেছি এবং এখন আমার সমস্ত পরিবেশের ভেরিয়েবল একবারে সেট হয়ে যায় .bash_profile। এই আমার সমস্যা মিথ্যা।

স্পষ্টতই, আমি তাদের দুটি স্থানে স্থাপন করার কারণটি ছিল পর্দার কারণ। স্ক্রিনটি কেবল সম্পাদনযোগ্য বলে মনে হয় .bashrcএবং আমার বাশ শেল থেকে আমার বা অন্য কোনও পরিবেশের ভেরিয়েবল সঠিকভাবে উত্তরাধিকারসূত্রে উপস্থিত হয় নাPATH । কারণ এটি কেবলমাত্র কার্যকর করে .bashrcএবং আমি এখন .bash_profileকেবল আমার ভেরিয়েবলগুলি সেট করি , আমি একটি অসম্পূর্ণ পেয়েছি PATH

আমার প্রশ্নটি হ'ল নকল ছাড়াই কীভাবে আমার পরিবেশের ভেরিয়েবলগুলি পর্দায় আনতে হবে। Bashদস্তাবেজগুলি পড়ার মাধ্যমে মনে হয় যে এটি কোনও ধরণের শেল হতে পারে যা স্ক্রিনটি লগ ইন করতে ব্যবহার করে, যেমন একটি লগইনবিহীন ইন্টারেক্টিভ শেল তবে কীভাবে স্ক্রিনকে একটি নির্দিষ্ট ধরণের শেল ব্যবহার করতে বাধ্য করা যায় তা আমি বুঝতে পারি না, কেবলমাত্র মাধ্যমে ব্যবহার শেল -s /bin/bash

আপনি আমার গিটহাব পৃষ্ঠায় আমার কনফিগারেশন ফাইলগুলি ব্যবহার করতে পারেন । এটি সেই প্রতিশ্রুতিবদ্ধ যা স্ক্রিনটিকে ভেঙে দিয়েছে

সম্পাদনা: আমি ব্যবহার করছি Screen version 4.00.03 (FAU) 23-Oct-06এবং আমি এটি চালিয়ে যেতে চাইscreen -h 50000

সম্পাদনা: আমি এখন এটি সাইগউইন ( CYGWIN_NT-5.1 1.7.1(0.218/5/3) i686, Screen version 4.00.03 (FAU) 23-Oct-06) এ পরীক্ষা করতে সক্ষম হয়েছি এবং এটি আমার ম্যাকের চেয়ে ভিন্ন আচরণের প্রদর্শন করে।

সুনির্দিষ্ট আচরণটি যেটি আমি এখন আবিষ্কার করেছি তা হ'ল সাইগউইনে আমি .bash_ প্রোফাইলে যে পরিবর্তনগুলি করেছি তা PATHস্ক্রিনে প্রবেশের পরে সদৃশ হয়ে যায় এবং তারপরে স্ক্রিন উইন্ডোগুলির ক্রমান্বয়ে সৃষ্টি পথটির সদৃশ হয় না তবে পুনরায় উত্স .Bash_profile করে do

আমি যে আচরণের কথা বলছি তা বোঝাতে:

একটি তাজা টার্মিনাল থেকে আউটপুট:

...

PATH: /home/tvishe01/bin/emacs/bin:/home/tvishe01/bin:/usr/local/bin:/usr/bin:/bin:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS:/cygdrive/c/WINDOWS/System32/Wbem:/cygdrive/c/Program Files/ATI Technologies/ATI.ACE/Core-Static:/groovy-1.6.1/bin:/usr/lib/lapack

MANPATH: /home/tvishe01/share/man:/usr/local/man:/usr/share/man:/usr/man::/usr/ssl/man

Aliases:
alias ..='cd ..'
alias ...='cd ../..'

...

[~]$

স্ক্রিনের প্রথম অনুরোধ থেকে আউটপুট:

[~]$ screen -h 50000 -s -/bin/bash

...

PATH: /home/tvishe01/bin/emacs/bin:/home/tvishe01/bin:/usr/local/bin:/usr/bin:/bin:/home/tvishe01/bin/emacs/bin:/home/tvishe01/bin:/usr/local/bin:/usr/bin:/bin:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS:/cygdrive/c/WINDOWS/System32/Wbem:/cygdrive/c/Program Files/ATI Technologies/ATI.ACE/Core-Static:/groovy-1.6.1/bin:/usr/lib/lapack

MANPATH: /home/tvishe01/share/man:/usr/local/man:/usr/share/man:/usr/man:/home/tvishe01/share/man:/usr/local/man:/usr/share/man:/usr/man::/usr/ssl/man:/usr/ssl/man

Aliases:
alias ..='cd ..'
alias ...='cd ../..'

...

[~]$

পরবর্তী কলগুলি C-a c:

...

PATH: /home/tvishe01/bin/emacs/bin:/home/tvishe01/bin:/usr/local/bin:/usr/bin:/bin:/home/tvishe01/bin/emacs/bin:/home/tvishe01/bin:/usr/local/bin:/usr/bin:/bin:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS:/cygdrive/c/WINDOWS/System32/Wbem:/cygdrive/c/Program Files/ATI Technologies/ATI.ACE/Core-Static:/groovy-1.6.1/bin:/usr/lib/lapack

MANPATH: /home/tvishe01/share/man:/usr/local/man:/usr/share/man:/usr/man:/home/tvishe01/share/man:/usr/local/man:/usr/share/man:/usr/man::/usr/ssl/man:/usr/ssl/man

Aliases:
alias ..='cd ..'
alias ...='cd ../..'

...

[~]$

তুমি দেখতে পার


সদৃশতা হ'ল কারণ আপনি শর্তহীনভাবে এগুলিকে যুক্ত করার জন্য ব্যাশটি কনফিগার করেছেন এটি একটি 'লগইন' শেল এবং আপনি স্ক্রিনটিকে বলছেন যে লগইন শেল হিসাবে বাশটি করতে inv শেলস, স্ক্রিন এবং পরিবেশের ভেরিয়েবলের সাধারণ সমস্যাগুলি সমাধান করার চেষ্টা করার জন্য আমি আমার উত্তরটি আবার লিখেছি ।
ক্রিস জনসন

উত্তর:


16

স্ক্রিন এবং পরিবেশ পরিবর্তনশীল

ডিফল্টরূপে, স্ক্রিনটি তার শেলগুলি (এবং অন্যান্য প্রক্রিয়াগুলি) দিয়ে যায় যা সেশন শুরু হওয়ার সাথে সাথে পরিবেশের ভেরিয়েবলগুলি যা ছিল (অর্থাত্ পুনরায় সংযুক্তি পরিবর্তন করে না যা কোন পরিবেশের ভেরিয়েবলগুলি নতুন শেলগুলিতে দেওয়া হয়)। তবে উভয়ই স্ক্রিন এবং শেলগুলির কনফিগারেশন ফাইলগুলি পরিবেশের ভেরিয়েবলগুলিকে পরিবর্তন করে, এমন অনেক জায়গা রয়েছে যেখানে অপ্রত্যাশিত পরিবর্তনগুলি চালু করা যেতে পারে। TERM এর মতো কয়েকটি ভেরিয়েবল রয়েছে যা পর্দা প্রায় সর্বদা পরিবর্তিত হয় তবে পর্দা সরবরাহ করে এমন কার্যকারিতার জন্য সাধারণত এটি প্রয়োজন ।

ধরা যাক যে আপনার শেলের কনফিগারেশন বা স্ক্রিনের কনফিগারেশন FOOBAR নামে একটি ভেরিয়েবল পরিবর্তন করবে না (মোটামুটি সম্ভবত, সব কিছু) in আপনি যদি একটি সেশন শুরু করেন FOOBAR=foo screen, তবে সেই সেশনে তৈরি সমস্ত শেলের একটি মান সহ FOOBAR নামের পরিবেশগত পরিবর্তনশীল থাকবে foo

বিষয়গুলি ভেরিয়েবলগুলির জন্য আরও জটিল হয়ে ওঠে যা স্ক্রিন বা আপনার শেলটি সংশোধন করতে পারে।

পর্দা ব্যবহার করার সময় সেটিংস অনুপস্থিত

লগইন শেলস

যদি আপনি দেখতে পান যে কিছু সেটিংস স্ক্রিনে শুরু হওয়া শেলগুলিতে অনুপস্থিত রয়েছে , এটির কারণ হতে পারে আপনার শেলটি কেবলমাত্র 'লগইন' শেলগুলির জন্য সেটিংগুলি আপডেট করার জন্য কনফিগার করা হয়েছে। বেশিরভাগ শেলগুলি একটি বিশেষ সম্মেলন বোঝায় (সি: এ **argv == '-') যে স্ক্রিনটি ব্যবহারের জন্য কনফিগার করা যেতে পারে।

স্ক্রিন ডকুমেন্টেশন প্রতি :

শেল কমান্ড

একটি নতুন শেল তৈরি করতে ব্যবহৃত কমান্ডটি সেট করুন। এটি পরিবেশের পরিবর্তনশীল EL শেলের মানকে ওভাররাইড করে। আপনি যদি কোনও টিটি-বর্ধক চালনা করতে চান যা এই প্রোগ্রামটি $ শেলের মধ্যে নির্দিষ্ট করে প্রোগ্রামটি নির্বাহের প্রত্যাশা করে, এটি দরকারী। যদি কমান্ডটি '-' অক্ষর দিয়ে শুরু হয়, শেলটি লগইন-শেল হিসাবে শুরু করা হবে।

আছে পর্দা , 'লগইন' শেল হিসাবে শুরু শাঁস শুরু পর্দা সঙ্গে screen -s -/bin/bash, অথবা আপনার এই লাইন যোগ .screenrc:

shell -/bin/bash

আপনি যে কোনও শেল ব্যবহার করে যাচ্ছেন তার পথে যাওয়ার জন্য সামঞ্জস্য করুন।

স্ক্রিন কনফিগারেশন

হারিয়ে যাওয়া বা পুনরুদ্ধার করা পরিবেশের ভেরিয়েবলগুলি কোনও স্ক্রিন কনফিগারেশন ফাইলের কারণে setenvএবং unsetenvআদেশগুলিও হতে পারে । আপনাকে আপনার হোম ডিরেক্টরিতে .স্ক্রিনআরসি এবং উভয়ই আপনার স্ক্রিনের সংকলনটি 'সিস্টেম স্ক্রিনসিআর' হিসাবে ব্যবহার করছে তা পরীক্ষা করতে হবে (আপনি সংকলনের সময় কনফিগার করা পথের নামটি খুঁজে পেতে চাইলে একটি আদেশটি চেষ্টা করতে পারেন - এটি সাধারণত / সিস্টেম-ইনস্টলড স্ক্রিনের জন্য ইত্যাদি / স্ক্রিনসিআর ; অ্যাড-অন ইনস্টলেশনগুলি সম্ভবত অন্য কোনও পথের নাম ব্যবহার করবে)। আপনি এই সেটিংস ফাইলগুলি অস্থায়ীভাবে এড়াতে ব্যবহার করতে পারেন , তবে একটি সংকলন-সময় বিকল্প রয়েছে যা SYSSCREENRC এর কার্যকর ব্যবহারকে বাধা দেয়strings "$(which screen)" | fgrep -i screenrcSCREENRC=/dev/null SYSSCREENRC=/dev/null screen (সম্ভবতঃ যাতে সিস্টেম প্রশাসকরা কিছুটা প্রাথমিক কনফিগারেশন জোর করতে পারেন)।

স্ক্রিন ব্যবহার করার সময় নকল সেটিংস

একটি শেল কনফিগারেশন ফাইল (গুলি) এর মধ্যে PATH এর মতো পরিবেশের পরিবর্তনশীল আইটেমগুলি যুক্ত করা মোটামুটি সাধারণ যাতে সাধারণ মানটি শেল সেশনগুলিতে (যেমন এক্সটার্ম বা অন্যান্য টার্মিনাল উইন্ডোজ, কনসোল সেশন ইত্যাদি) উপলভ্য থাকে । যদি এই জাতীয় আইটেমগুলি শেলের প্রতিটি শেল কনফিগারেশনে যুক্ত করা হয় (বা আপনি যদি -/path/to/shellউপরে বর্ণিত সেটিংসটি প্রতি লগইন কনফিগারেশনে ব্যবহার করেন) তবে স্ক্রিন দ্বারা শুরু হওয়া শেলটিতে সম্ভবত যুক্ত আইটেমগুলির একাধিক অনুলিপি থাকতে পারে।

এটি এড়ানোর জন্য একটি কৌশল হ'ল PATH এর মত চলকগুলিতে সমস্ত সংযোজন আপনার শেলের প্রতি লগইন কনফিগারেশনে রাখা এবং স্ক্রিনের সাহায্যে -/path/to/shellশেল সেটিংস ব্যবহার করা এড়ানো ।

আরেকটি কৌশল হ'ল শর্তাধীন নতুন আইটেমগুলিকে পরিবর্তনশীলটিতে যুক্ত করা। শেলের উপর নির্ভর করে এটি করার কোডটি কিছুটা জটিল হতে পারে তবে সহজেই এটি ব্যবহারের জন্য শেল ফাংশনে আবদ্ধ হতে পারে।

তবুও অন্য কৌশল হ'ল সর্বদা আপনার কনফিগারেশন ফাইলগুলিতে একটি নির্দিষ্ট মান দিয়ে শুরু করা। আপনার কনফিগারেশন ফাইলগুলি সিস্টেম থেকে সিস্টেমে সরিয়ে নিয়ে যাওয়ার সময় এটি সমস্যার সৃষ্টি করতে পারে যখন ডিফল্ট মানগুলি উল্লেখযোগ্যভাবে পরিবর্তিত হতে পারে।

কারণ নির্ণয়

আপনি যদি নির্দিষ্ট কোনও পরিবর্তন সংঘটিত হচ্ছে যেখানে সরাসরি স্পষ্ট না করতে পারেন তবে পরিবর্তনটি কোথায় ঘটছে তা ট্র্যাক করার জন্য আপনি নীচের চেষ্টা করতে পারেন।

আপনার প্রাথমিক শেলটিতে বর্তমান মানটি পরীক্ষা করুন:

echo "$PATH"

সাব-শেল তৈরি হওয়ার পরে শেল নিজেই কীভাবে মানটি পরিবর্তন করে তা পরীক্ষা করে দেখুন:

/bin/bash -c 'echo "$PATH"'

একটি 'লগইন' সাব-শেল তৈরি হওয়ার পরে শেলটি কীভাবে মান পরিবর্তন করে তা পরীক্ষা করে দেখুন:

perl -e '$s=shift;exec {$s} "-$s", @ARGV or die "unable to start shell"' /bin/bash
echo "$PATH"
exit

কীভাবে স্ক্রিনটি মান পরিবর্তন করে:

printf '#!/bin/sh\nl=/tmp/echo-var.log;rm -f "$l"; echo $PATH >"$l"' >/tmp/echo-var &&
chmod a+x /tmp/echo-var &&
screen -s /tmp/echo-var &&
cat /tmp/echo-var.log

এটি আমার সমস্যার একটি অংশ সমাধান করে। দুর্ভাগ্যক্রমে এটি পুরো পথে যায় না। এখন, স্ক্রিনটি খুব ভালভাবে কাজ করছে screen -s -/bin/bashতবে এটি আমার কাজের মেশিনে সাইগউইনের অধীনে আচরণ করবে বলে আশা করে আসছি বলে এটি আচরণ করে না। এই মেশিনে, আমি চালিত করি screen -h 50000এবং এটি কেবলমাত্র PATHফাইলটি পুনরায় সোর্স না করে কেবল আমার উত্তরাধিকার সূত্রে আসে। আমি যখনই একটি নতুন উইন্ডো চালু করি তখনই এটি উভয়ই চালিত হয়।
টিম দর্শক

স্ক্রিন প্রক্রিয়াটির পরিবেশটি সর্বদা এর শিশুদের দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত হওয়া উচিত (টিআরএম এর মতো সামগ্রী বাদে এটি ওভাররাইড হতে পারে)। ব্যবহার করে দেখুন FOOBAR=baz screenএবং চেক echo $FOOBARথেকে খোলসের উইন্ডোতে screenএবং screen -s -/bin/bash। উভয় প্রকরণের FOOBAR= হওয়া উচিত baz। যদি আপনার PATHসংশোধন করা হচ্ছে, তবে আপনাকে এটি কী করছে তা সন্ধান করতে হবে। ব্যবহার করে দেখুন SYSSCREENRC=/dev/null SCREENRC=/dev/null screen, যে যদি আপনার দেয় PATHমাধ্যমে, তাহলে এটি একটি সম্ভবত setenv PATHমধ্যে /etc/screenrcবা ~/.screenrc। অন্যথায় এটি আপনার .bashrcকিছু করছে।
ক্রিস জনসেন

আমি আমার উত্তরের সাথে আরও বড় লেখার / সংযোজন করেছি।
ক্রিস জনসন

2

শেষ বার যখন আমি একটি অনুরূপ সমস্যা দেখেছি screen -lতখন স্ক্রিন শুরু করার সময় এটি ব্যবহার করে সমাধান করেছি ।

আপনি ব্যবহার করতে পারেন -lযখন invoking বিকল্প screen(পালা লগইন মোড ; এছাড়াও দ্বারা নিয়ন্ত্রিত উপর defloginএবং loginকমান্ড .screenrcসেট কিনা পর্দা ডিফল্টরূপে উইন্ডো লগ ইন করা উচিত করার জন্য (যোগ /, / etc / utmp এন্ট্রি অপসারণ))।

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

-lদেবিয়ান লেনির ডিফল্ট স্ক্রিনে (v4.0.3) মোডের দরকার নেই বলে মনে হয় ; এটি ডিফল্ট হিসাবে মনে হচ্ছে। আমার ~/.profileএবং ~/.bashrcসঠিকভাবে পড়া হচ্ছে। কেমন আছো screen? আপনি কি সংস্করণ ব্যবহার করছেন?


এই তত্ত্বের অধীনে, আমার চালানো screen -lnউচিত নয়~/.profile , এবং এটি এখনও চালানো হয়। -lপতাকাটি চেষ্টা করে দেখুন , তবে এটি সম্ভবত সঠিক উত্তর নয়। এই মুহুর্তের জন্য এটি এখানে ছেড়ে দেবে।
কোয়াকোট কোয়েসোট

দেখে মনে হচ্ছে যে -lকেবলমাত্র ফাইলটিতে screenএকটি এন্ট্রি যুক্ত হয়েছে কিনা তা নিয়ন্ত্রণ করে utmp, না এটি নিজের -lবিকল্পের সাথে নতুন শেলগুলি আহ্বান করে বা এক্সিকিউটিউটে- -প্রিফিক্স কাস্টম ব্যবহার করে কিনা ।
ক্রিস জনসেন

2

চিতাবাঘে লঞ্চ করা আচরণের মধ্যেই সমস্যাটি রয়েছে। আপনি কোনওভাবে স্নো চিতাবাঘের আরম্ভের ব্যাকপোর্ট না করতে না পারলে চিতাবাঘের স্ক্রিনের জন্য এই ম্যাকপোর্টস বাগ বাগটি দেখুন ever

https://trac.macports.org/ticket/18235#comment:26


1

.Bash_profile এর মধ্যে থেকে আপনার .Bashrc স্যুট করার ক্ষেত্রে কোনও অসুবিধা নেই। আপনি যদি স্থানীয়ভাবে কেবল নিজের মেশিন ব্যবহার করছেন তবে আপনার .bash_profile বেশিরভাগ ক্ষেত্রে কেবলমাত্র আপনার প্রাথমিক লগইন করলেই তা উত্সাহিত হবে (স্পষ্টতই এটি অন্য সময় আসবে)।

আমি আমার ফাইলগুলি এমনভাবে সংগঠিত করি যাতে লগইন করার সময় যদি আমি কিছু করতে চাই তবে আমি তথ্যটি .Bash_ প্রোফাইলে রাখি এবং অন্য কিছুর জন্য আমি সেগুলিকে .bashrc এ রাখি। PATH হ'ল একটি জিনিস যা আমি আমার .Bashrc এ রেখেছি এবং আমার .bash_profile এ .bashrc উত্স করে।


আপনি কি নিজের .bashrcএবং .bash_profileফাইলগুলি কোথাও পোস্ট করতে স্বাচ্ছন্দ্য বোধ করবেন যাতে আমি সেগুলি দেখতে পারি? অনুরূপ কিছু করার সময় আমি যে সমস্যার মধ্যে পড়েছিলাম তা হ'ল PATHপ্রতিবারই আমি একটি নতুন স্ক্রিন উদাহরণ তৈরি করব কারণ এটি পুরানো উত্তরাধিকারী হবে PATHএবং তারপরে সবকিছু আবার যুক্ত করবে।
টিম দর্শক

দুঃখিত টিম, আমি এটি দেখতে পেলাম না ... আমি চারপাশে প্রচুর জিনিস পরিবর্তন করেছি যাতে তারা প্রচুর পরিমাণে অর্থ বোধ করবে না, তবে এটি মূলত আমি যা করি। # .বাশ_ প্রোফাইল যদি [-f ~ / .bashrc]; তারপর। b / .bashrc ফাই এর পরে আমি .Bashrc এ অন্য সব কিছু রেখেছি, আমি প্রথম লগইন করার সময় আমি যে জিনিসগুলি শুরু করতে চাই তা বাদ দিয়ে যা .bash_profile এও যায়। বেশিরভাগ প্যাথ = / পথ / থেকে / বাইনারি 1 রফতানির মতো এক পাথ সংজ্ঞা পরিবর্তনের পরিবর্তে

0

মত যে, আমি একজন ফাইল তৈরি যখনই আমি কিছু সমস্যা আছে $HOME/.debugএবং ফাইল সব sourced / লগইন / শেল আবাহন সময় মৃত্যুদন্ড কার্যকর (যেমন ~/.bashrc, ~/.bash_profile, ~/.profile, /etc/bashrc, ইত্যাদি) আমি প্রথম লাইন হিসেবে আছে

test -f $HOME/.debug && echo $HOME/.bashrc 1>&2

অথবা সাদৃশ্যপূর্ণ. নির্দিষ্ট ডিবাগিংয়ের জন্য আপনি এই জাতীয় জিনিসও যুক্ত করতে পারেন

test -f $HOME/.debug && echo PATH now equals $PATH 1>&2

এই পদ্ধতিতে আপনি 100% নিশ্চিত হতে পারবেন যে কোন ফাইলগুলি ব্যবহৃত হয় বা কী ব্যবহৃত হয়।

স্ট্যাডারে পুনঃনির্দেশ গুরুত্বপূর্ণ, আপনি অনেক পরিস্থিতিতে স্টডআউটকে গোলমাল করতে চান না।


0

আপনি। প্রোফাইলে থাকতে পারেন যেহেতু সিস্টেমটি বাশার্ক স্পর্শ করে না (গ্রাফিক্স সেশনের মতো) এখন আপনার কাছে কেবল দুটি পরিবেশের আলাদা আলাদা সেট রয়েছে। একটি।

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