vim এর সাথে ইউনিক্স কমান্ড কার্যকর করতে পারে না:! শেল পরিবর্তনের কারণে


8

আমাদের সংস্থা লাল টুপি লিনাক্স সিস্টেম ব্যবহার করে এবং প্রত্যেককে / বাড়িতে একটি অ্যাকাউন্ট বরাদ্দ করে। দুর্ভাগ্যক্রমে, আমাদের সিস্টেমটি tsch ব্যবহার করছে, যা আমার পক্ষে অনুকূল নয়। তদুপরি, আমার কাছে সুপার ব্যবহারকারীর অনুমতি না থাকায় আমি chsh কমান্ডটি নিজের জন্য ব্যাশে পরিবর্তন করতে ব্যবহার করতে পারি না। আরও খারাপ, ypchsh আমার জন্যও অনুপলব্ধ। সুতরাং, শেষ অবধি, আমি .cshrc এ নিম্নলিখিত লাইনগুলি যুক্ত করেছি:

    bash
    echo $0

এবং .bashrc যথাযথভাবে কনফিগার করুন (মূল .cshrc থেকে অনুলিপি করে প্রয়োজনীয় সিনট্যাক্স ত্রুটি স্থির করে)। এখন আপাত শেল বাশ হয়ে যায় ("প্রতিধ্বনি $ 0" কমান্ড থেকে প্রদর্শিত হতে পারে)।

এখন সমস্যাটি উঠে আসে:

আমি যখন সিপিপি ফাইল সম্পাদনা করতে (যেমন, হ্যালো_ওয়ার্ল্ড) ভিএম ব্যবহার করি এবং ফাইলটি সংকলিত করতে ভিএম-তে ":! G ++ -g হ্যালো_ওয়ার্ল্ড। "বাশ" দেখানো হয়েছে (যেমন কোনও টার্মিনাল খোলা থাকে), তবে স্বাভাবিকভাবেই ভিমে আমার কাজে ফিরে আসার জন্য "একটি কী চাপুন"। হ্যালো_ওয়ার্ল্ড.সি.পি ফোল্ডারে একটি .Hello_World.cpp.swp ফাইল রয়েছে তবে hw.out নয়। আবার যখন হ্যালো_ওয়ার্ড।

তবে, আমি যদি ফোল্ডারে সিপিপি ফাইলটি ++ করি তবে ভিএম এবং:! ব্যবহার না করে, সবকিছু ঠিক আছে। আসলে, :! এখন ভিএম এর জন্য অবৈধ বলে মনে হচ্ছে।

আমি যদি মূল টিসিএস ব্যবহার করি তবে সবকিছু ঠিক আছে।

আমি কীভাবে এই কৌতূহলীয় ত্রুটিটি ঠিক করতে পারি?

আপনার অগ্রিম সহায়তার জন্য ধন্যবাদ

চিং

বিটিডাব্লু: আমি প্রাথমিকভাবে হিস্টিগনোর এবং হিস্টকন্ট্রোলের সুবিধার কারণে tcsh এ বাশ পছন্দ করি, যদিও tcsh এ হিস্টডআপ সেটিংস রয়েছে।

আমি নিম্নলিখিতটি একটু সহায়ক বলে মনে করি তবে এখনও আমার সমস্যার জন্য সন্তোষজনক নয়।

কীভাবে ইউমিকের মধ্যে থেকে ইউনিক্স কমান্ডগুলি চালানো যায়?


chshআপনার লগইন শেল পরিবর্তন করতে ব্যবহার করুন ।
Рахматуллин Рахматуллин

উত্তর:


8

এটি আপনার। লগিন স্ক্রিপ্টে রাখুন:

setenv SHELL /bin/bash
exec bash -l

প্রথম লাইন শেল পরিবেশ পরিবর্তনশীল সেট করে। দ্বিতীয় লাইনটি এর tcshসাথে প্রতিস্থাপন করে bash, তবে এটি লগইন শেল হিসাবে চালিত করতে বলে (যাতে bashআপনার .profileইত্যাদি প্রসেস হবে )। -iএটিকে ইন্টারঅ্যাকটিভ করার জন্য আপনি একটি বিকল্প যুক্ত করতে পারেন; এটি প্রয়োজন হবে না।


2
আপনি set shell=/bin/bashভিআইএম এর ভিতরেও রাখতে পারেন। এইভাবে, আপনি নিজের শেলটি রাখতে পারেন, তবে ভিআইএম-এ BASH ব্যবহার করতে পারেন এবং !সমস্যাগুলি এড়াতে পারেন । তবে, আমি দেখতে পাচ্ছি যে ওপিতে যেভাবেই বাশ পছন্দ হয়, সুতরাং আপনার সমাধানটি কেবল ভিআইএম সমস্যা সমাধান করবে না, বরং ওপিকে তাদের পছন্দের শেলটি দেবে।
ডেভিড ডব্লিউ।

আপনি ঠিক বলেছেন, @ ডেভিডডাব্লু। যেহেতু যে কেউ তাদের শেলকে vim(বা vi) যা যা পছন্দ করতে সেট করতে পারে, তাই আপনি যদি ব্যবহারকারীকে viবা এর অ্যাক্সেসের অনুমতি দেন তবে কোনও সিস্টেমে অ্যাক্সেসকে সীমাবদ্ধ করা মূলত অসম্ভব vim। অতীতে লোকেরা শেলটি একটি বিশেষ প্রোগ্রামে সেট করার চেষ্টা করেছিল যা কেবলমাত্র নির্দিষ্ট আদেশগুলি কার্যকর করে। যাইহোক, যদি এই কমান্ডগুলির মধ্যে একটি হয় viবা হয় vimতবে তাদের যেকোন উপায়ে সিস্টেমে অ্যাক্সেস রয়েছে।
জোনাথন লেফলার

আমি দুঃখিত যে আমি এই ওয়েবসাইটের নবাগত হিসাবে, আমি এই উত্তর সম্পর্কে আগে মন্তব্য করতে জানি না। আপনার সাহায্যের জন্য আপনাকে অনেক ধন্যবাদ। পুনঃটুইট
JQK

2

যে কোনও ব্যবহারকারীর জন্য ডিফল্ট শেলটি / etc / passwd ফাইলে সংরক্ষণ করা হয়। chshকমান্ড জারি করে ব্যবহারকারীরা তাদের ডিফল্ট শেলটি / ইত্যাদি / শেলের মধ্যে তালিকাভুক্ত যে কোনও শেলতে পরিবর্তন করতে পারেন । আরও তথ্যের জন্য chsh (1) এবং শেল (5) এর ম্যানুয়াল পৃষ্ঠাগুলি দেখুন Consult

লগ ইন করার পরে বর্তমান শেলটি প্রতিস্থাপনের পদ্ধতির চেয়ে এই উত্তরটি "আরও সঠিক" কারণ এটি প্রথমে অনাকাঙ্ক্ষিত শেলটি শুরু করা অপ্রয়োজনীয়। এই পদ্ধতিটি তখনই কার্যকর যখন প্রশাসক / ইত্যাদি / শেল ফাইল উপেক্ষা করে এবং তাতে বাশ যুক্ত করতে ভুলে যায় (কখনই নয়)।


হাই , প্যাক্স, আপনার উত্তরের জন্য আপনাকে ধন্যবাদ। তবে chsh কমান্ড কার্যকর করার অনুমতি আমার নেই। প্রশাসক আমার শেলটি পরিবর্তন করতে chsh ব্যবহার করতে চান না। আপনাকে সকল ধন্যবাদ।
JQK

1

আপনার সমস্ত দুর্দান্ত সাহায্যের জন্য আপনাকে ধন্যবাদ।

আমি যে চূড়ান্ত সমাধানটি পছন্দ করি তা দেওয়ার আগে আমাকে আমার মূল প্রশ্নটিতে একটি ভুল নির্দেশ করতে হবে। আমার আসল .cshrc- এ নিম্নলিখিত তিনটি লাইন রয়েছে:

     bash
     source ~/.bashrc
     echo $0

আমি এর আগে দ্বিতীয় লাইনটি টাইপ করিনি। দুঃখিত।

এখন, আমি এই দুটি পদ্ধতি ব্যবহার করে দেখেছি এবং ফলাফলগুলি নীচে দেখানো হয়েছে।

1) .vimrc পদ্ধতি

আমি যদি লিখি

     bash
     source ~/.bashrc
     echo $0

~ / .cshrc এ

এবং

     set shell=/bin/bash

~ / .vimrc এ

কোনও ~ / .Lgin ফাইল ছাড়াই, তারপরে vim এবং:! g ++ ঠিক আছে, কিন্তু:! gdb a.out এর কিছু ভুল আছে। তদ্ব্যতীত, "প্রতিধ্বনি $ 0" "বাশ" দেয় তবে "প্রতিধ্বনি $ শেল" "/ বিন / টিসিএএস" দেয়। আমি ঠিক $ 0 এবং EL শেলের মধ্যে পার্থক্য জানি না।

2) .লগিন পদ্ধতি

আমি যদি লিখি

     setenv SHELL /bin/bash
     bash
     source ~/.bashrc
     echo $0

ইন .লগিন

তবে neither / .vimrc এ "সেট শেল = ..." বা b / .cshrc এ "বাশ ..." এর মতো কিছুই নেই, সবকিছু ঠিক আছে। এখন, "প্রতিধ্বনি $ 0" "বাশ" দেয় এবং "প্রতিধ্বনি $ শেল" "/ বিন / বাশ" দেয়।

দ্বিতীয় লাইনে থাকা ব্যাশকে "bash -l" দ্বারা প্রতিস্থাপন করা যেতে পারে। এটি লক্ষ করা উচিত যে আমি যদি এটি "এক্সিকিউশন ব্যাশ" বা "এক্সিকিউশন ব্যাশ-এল" দ্বারা প্রতিস্থাপন করি তবে আমি আমার অ্যাকাউন্টে লগ ইন করতে সক্ষম হব না। (সিস্টেমটি স্বয়ংক্রিয়ভাবে দ্রুত বন্ধ হয়ে যায়)) কেন, আমি জানি না।

আমার মনে হয় দ্বিতীয় পদ্ধতিটি দুর্দান্ত। আমি আপনার সাহায্যের খুব প্রশংসা করি

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