সোর্সিংয়ের পরে ssh সহ একটি ইন্টারেক্টিভ শেলের একটি কমান্ড চালান .bashrc


11

আমি একটি দূরবর্তী উবুন্টু কম্পিউটারে প্রবেশ করতে চাই, আমার উত্স তৈরি করতে .bashrcএবং একটি কমান্ড চালাতে চাই যা তার দ্বারা নির্ধারিত পরামিতিগুলির উপর নির্ভর করে .bashrc। একটি ইন্টারেক্টিভ শেলের মধ্যে যা কমান্ডটি শেষ হওয়ার পরে বন্ধ হয় না।

আমি এখন পর্যন্ত যা চেষ্টা করেছি তা হ'ল

ssh user@remote_computer -t 'bash -l -c "my_alias;bash"'

বা শুধু

ssh user@remote_computer -t "my_alias;bash"

এটি সাধারণ কমান্ডগুলির জন্য কাজ করে ( lsউদাহরণস্বরূপ) তবে যখন আমি কোনও সংজ্ঞায়িত কোনও উপনাম চালানোর চেষ্টা করি তখন .bashrcত্রুটি পাই:

bash: my_alias: command not found

কিন্তু তারপরে আমি যখন আবার এটি ম্যানুয়ালি লিখি এবং চালিত করি তখন এটি কার্যকর হয়!

সুতরাং আমি কীভাবে নিশ্চিত করব .bashrcযে কমান্ডটি বলার আগেই তা নিশ্চিত হয়ে নেওয়া উচিত?


পোস্টটি গুলিয়ে ফেলছে। আমি অনুরোধ করছি চলমান কমান্ডগুলিকে অপব্যবহার না করার; তবুও যদি বাশ বা ব্যাশ কমান্ডটি চাওয়া হয় তবে আমি বলব .বাশার্ক চালানোর কথা। এরকম একটি কমান্ড চালানোর ক্ষেত্রে স্পষ্টতই কিছু পার্থক্য বা বিশেষত্ব রয়েছে এবং আরও গুরুতর অ্যাপ্লিকেশনগুলির জন্য আমি উত্তরযোগ্য বা পুতুলকে সুপারিশ করব।
রুই এফ রিবেইরো

আমি আমার প্রশ্ন সম্পাদনা করেছি। দ্বিতীয় কমান্ডটি আরও সহজ এবং একই কাজ করে তবে এখনও আগে।
মেহেদী

@ রুইএফরিবিড়ো আপত্তি ?? এত সহজ জিনিসকে আপনি কীভাবে আপত্তি বলতে পারবেন ?? ssh দিয়ে একটি রিমোট মেশিনে লগইন করার পরে স্বয়ংক্রিয়ভাবে একটি কমান্ড চালানো, এটি তার মতো সহজ। এমন একটি হাস্যকর ছোট কাজের জন্য যে কোনও বাহ্যিক সরঞ্জাম মোতায়েন করা হবে ওভারকিল হবে
মেহেদি

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

উত্তর:


9

সমস্যাটি হ'ল আপনি একটি অ-ইন্টারেক্টিভ শেলটিতে একটি উপনাম চালানোর চেষ্টা করছেন। আপনি যখন চালান ssh user@computer command, commandঅ-ইন্টারেক্টিভভাবে চালিত হয়।

অ ইন্টারেক্টিভ শেলগুলি এলিয়াসগুলি পড়ে না (ম্যান বাশ থেকে):

শেলটি ইন্টারেক্টিভ না হলে অ্যালিয়াসগুলি প্রসারিত হয় না, যদি না শপ বিকল্পটি প্রসারিত_লিয়াস শেল বিকল্পটি সেট করা না হয় (নীচে শেল বিল্টিন কম্যান্ডের অধীনে শপটের বর্ণনা দেখুন)।

আপনি যদি এটিকে আবার ম্যানুয়ালি চালান তবে এটি কাজ করে কারণ চূড়ান্ত bashকমান্ডটি একটি ইন্টারেক্টিভ শেল শুরু করে যাতে আপনার উপাধি এখন উপলব্ধ।

বিকল্প হিসাবে, আপনি আপনার এলিফ চালানোর জন্য রিমোট মেশিনে bash -iএকটি সাধারণ লগইন শেল ( bash -l) এর পরিবর্তে একটি ইন্টারেক্টিভ শেল ( ) চালু করতে পারেন :

ssh user@remote_computer -t 'bash -ic "my_alias;bash"'

এটি যদিও খুব জটিল পদ্ধতির বলে মনে হচ্ছে। কেন আপনাকে ঠিক এটি করা দরকার তা আপনি ব্যাখ্যা করেননি তবে এই বিকল্পগুলি বিবেচনা করুন:

  1. দূরবর্তী মেশিনে কেবল একটি সাধারণ লগইন ইন্টারেক্টিভ শেল শুরু করুন এবং ম্যানুয়ালি কমান্ডটি চালান:

    user@local $ ssh user@remote
    user@remote $ my_alias
  2. আপনি যদি এই কম্পিউটারের সাথে সংযোগ স্থাপন করেন তবে আপনি সর্বদা সেই উপনামটি চালিত হতে চান তবে দূরবর্তী কম্পিউটারের ~/.profile(বা ~/.bash_profileউপস্থিত থাকলে) সম্পাদনা করুন এবং এই লাইনটি শেষে যুক্ত করুন:

    my_alias

    কারণ ~/.profileপ্রতিবার একটি লগইন শেল চালু হওয়ার পরে (যেমন, প্রতিটি বার আপনি যখন সংযুক্ত হন ssh, উদাহরণস্বরূপ) পড়া হয়, এটি my_aliasপ্রতিবার আপনি সংযুক্ত হওয়ার সময় চালানো হবে।

    উল্লেখ্য, ডিফল্টরূপে, লগইন শাঁস পড়া ~/.profileবা ~/.bash_profileএবং উপেক্ষা ~/.bashrc। কিছু বিতরণ (উদাহরণস্বরূপ ডেবিয়ান এবং এর ডেরিভেটিভস এবং আর্চ) উবুন্টুর মতো বিতরণগুলিতে তাদের ডিফল্ট ~/.profileবা ~/.bash_profileফাইলগুলির উত্স রয়েছে ~/.bashrcযার অর্থ আপনার এলিয়াসগুলি সংজ্ঞায়িত করা ~/.bashrcলগইন শেলের মধ্যেও পাওয়া যাবে। এটি সমস্ত বিতরণের ক্ষেত্রে সত্য নয়, সুতরাং ~/.profileএটির উত্স পেতে আপনাকে নিজেরাই সম্পাদনা করতে হতে পারে ~/.bashrc। এছাড়াও মনে রাখবেন যে ~/.bash_profileউপস্থিত থাকলে ~/.profileবাশ দ্বারা উপেক্ষা করা হবে।


তাহলে আপনি কি উপনাম_প্রফাইলে সংজ্ঞায়িত এলিয়াস রাখার পরামর্শ দিন এবং তাদেরকে।
মেহেদী

@ মেহেদী আপনি কি করতে চান তার উপর নির্ভর করবে। আপনার উবুন্টু সিস্টেমে ~/.basyrcস্বয়ংক্রিয়ভাবে পড়তে হবে ~./profile, সুতরাং সংজ্ঞায়িত কোনও উপকরণগুলি ~/.bashrcকোনও শেল পড়ার জন্য উপলব্ধ হবে ~/.profile। এটি কাজ করার জন্য আপনার যা যা করার দরকার তা হ'ল স্পষ্টভাবে একটি ইন্টারেক্টিভ শেল ( -i) শুরু করা।
টেরডন

5

আমাকে আমার .bashrc এর একটি অংশ মন্তব্য করতে হয়েছিল যা এলিয়াসগুলি ব্যবহার হতে বাধা দেয় এবং একটি প্রসারিত_আলিয়াস কমান্ড যুক্ত করেছিল। এটি মন্তব্য করা হয়েছিল

# If not running interactively, don't do anything
#case $- in
#    *i*) ;;
#      *) return;;
#esac

এবং এটি যুক্ত করা হয়েছিল

if [ -z "$PS1" ]; then
  shopt -s expand_aliases
fi

তারপরে আমার আদেশটি কাজ করেছিল:

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