ক্লায়েন্ট হোস্ট থেকে 'ssh' ব্যবহার করে একটি দূরবর্তী সার্ভার হোস্টে স্থায়ী পরিবর্তনগুলি সংশোধন করুন


0

শিরোনাম বলে, আমি 'ssh' ব্যবহার করে রিমোট সার্ভারে পরিবেশের পরিবর্তনগুলি সংশোধন করতে চাই।

আমার প্রথম প্রচেষ্টা ছিল:

$ ssh mysvr -l sikaiwei "getId=$ORANGE; echo $ORANGE; ORANGE=$((ORANGE+1)); echo $ORANGE; echo 'getId is '+$getId;"

প্রথমে, আমি সার্ভার হোস্টে $ ORANGE সংজ্ঞায়িত করে নি, কিন্তু $ ORANGE কে ক্লায়েন্টে "1" হিসাবে সংজ্ঞায়িত করেছে, এবং আমি পেয়েছি:

1
1
getId is +

উল্লেখ্য, কমান্ডটি ক্লায়েন্টের মান $ ORANGE এর মানটি বাছাই করছে, এবং আপডেট ( ORANGE+1 ) ঘটছে না।

তারপর আমি ক্লায়েন্ট হোস্টে $ ORANGE সংজ্ঞাটি সরিয়ে দিয়েছি, এবং আমার মধ্যে একটি কমান্ড স্থাপন করে সার্ভারে $ ORANGE সংজ্ঞায়িত .bash_profile। কিন্তু

$ ssh mysvr -l sikaiwei "getId=$ORANGE; echo $ORANGE; ORANGE=$((ORANGE+1)); echo $ORANGE; echo 'getId is '+$getId;"

ফলে



getId is +

এটি $ ORANGE এর মান মুদ্রণ করতে পারে না যা আমি সার্ভার হোস্টে আরম্ভ করার চেষ্টা করেছি! তারপর আমি এই চেষ্টা:

$ ssh mysvr -l sikaiwei "। .profile;  getId = $ কমলা; $ ORANGE প্রতিধ্বনি; কমলা = $ ((কমলা +1)); $ ORANGE প্রতিধ্বনি; echo 'getId হয়' + $ getId; "


GetId + হয় 

এটা এখনও কাজ করে না।

আমি '..' (একক উদ্ধৃতি) এর পরিবর্তে ".." (ডাবল উদ্ধৃতি) ব্যবহার করার চেষ্টা করেছি, যেমন আপনি বলেছেন, কিন্তু এটা কিছুই প্রিন্ট ...

$ ssh myth@mysvr 'echo orangeis $ORANGE'
orangeis 

আমি মুদ্রণ করতে চান

 getId=1; echo 1; ORANGE=2; echo 2; …

পরিবর্তে

 getId=; echo ; ORANGE=1; echo ; …

তাই আমি কিভাবে ক্লায়েন্ট মান পরিবর্তে সার্ভার হোস্ট থেকে $ ORANGE মান ব্যবহার করতে পারি?

আমার সার্ভার মেশিন উইন্ডোজ রান, কিন্তু আমি সিগুইন ইনস্টল। আমার ক্লায়েন্ট মেশিন লিনাক্স চালায়।

সম্পাদনা: আমি সমস্যাটির অংশ খুঁজে পেয়েছি: আমি $ ORANGE এ সেট করেছিলাম ~/.bash_profile সার্ভার হোস্টে, এবং আমি একটি ইন্টারেক্টিভ শেল (সিগুইন) -এ "ইকো $ ORANGE" ব্যবহার করে $ ORANGE এর মান পেতে পারি, কিন্তু এটি প্রভাবিত করে না ssh কমান্ড স্ট্রিং। উদাহরণস্বরূপ, আমার ক্লায়েন্ট হোস্ট ব্যবহার করে আমি কিছুই পাই না

$ ssh sikaiwei@mysvr 'echo orange is $ORANGE'
orange is

এটির মতো, আমি সার্ভারের একটি সেশনে যা $ ORANGE এর মান পাই না। দ্য . .profile যে আমি যোগ করেনি সাহায্য না। কিন্তু আমি যদি

$ ssh sikaiwei@mysvr '. ~/.bash_profile;echo orange is $ORANGE'
orange is 4

আমি মান পেয়েছিলাম!


ওহ, আমি উল্লেখ করতে ভুলে গেছি: সার্ভারে এই পরিবর্তনগুলি স্থির থাকতে চাই। অন্য কথায়, যদি আমি একটি execute ssh কমান্ড যা 4 থেকে 42 ডলারের ORANGE এর মান পরিবর্তন করে, আমি চাইলে অন্যটি করার সময় $ ORANGE হতে হবে 42 ssh কমান্ড।


আপনি বলছেন, "আমি ... সার্ভার হোস্টে $ ORANGE সংজ্ঞায়িত করেছি।" কিভাবে? আপনি সার্ভারে ORANGE সংজ্ঞায়িত করতে কি করবেন?
Scott

সার্ভার মেশিন আমার। এটি উইন্ডোজ চালানো, কিন্তু Cygwin ইনস্টল। সার্ভারে। Bash_profile মধ্যে ORANGE defef।
orange

তুমি কি নিশ্চিত .bash_profile জন্য প্রক্রিয়া পায় ssh কাজ? আপনি নির্বাণ দ্বারা পরীক্ষা করতে পারেন echo $ORANGE মধ্যে .bash_profile?
Scott

আমার দোষ ... প্রথম আমি ব্যবহার করি . ~/.bash_profile, তারপর আমি সংজ্ঞায়িত পরিবর্তনশীল ব্যবহার করতে পারেন ~/.bash_profile
orange

ভাল ব্যাশ (1) মানুষ পাতা যে বলে bash সার্চ .bash_profile শুধুমাত্র যদি এটি একটি ইন্টারেক্টিভ শেল হয়, বা এটি সঙ্গে আহ্বান করা হয় --login বিকল্প। আপনি যদি আহ্বান জানান ssh কমান্ড স্ট্রিং যুক্তি সহ, শেলটি ইন্টারেক্টিভ হিসাবে বিবেচিত হবে না, এবং তাই .bash_profile স্বয়ংক্রিয়ভাবে পড়তে হবে না।
Scott

উত্তর:


0

সমস্যা শেল ভেরিয়েবল হয় (কোন কোন পরিবেশ ভেরিয়েবলগুলি একটি উপসেট বা বৈকল্পিক) যে ডবল উদ্ধৃতি উদ্ধৃত হয় ( "…" ) অবিলম্বে প্রক্রিয়া করা হয়। তাই যদি ORANGE 1 স্থানীয়ভাবে সেট করা হয়, আপনি আপনার প্রথম পরীক্ষা করা হচ্ছে রিপোর্ট হিসাবে , এবং আপনি টাইপ করুন

… ssh … "getId=$ORANGE; echo $ORANGE; ORANGE=$((ORANGE+1)); echo $ORANGE; …"

ssh পাচ্ছি

getId=1; echo 1; ORANGE=2; echo 1; …

এবং যদি ORANGE স্থানীয়ভাবে সেট করা হয় না, আপনি আপনার দ্বিতীয় পরীক্ষা সম্পন্ন রিপোর্ট হিসাবে , ssh পাচ্ছি

getId=; echo ; ORANGE=1; echo ; …

রিমোট সিস্টেমে কমান্ড পাঠানোর জন্য আপনি এটি টাইপ করেছেন, ডলার চিহ্ন সহ সম্পূর্ণ করুন, তাই রিমোট সিস্টেমে শেল দ্বারা এটি প্রক্রিয়া করা হবে, একক উদ্ধৃতি এটি মোড়ানো ( '…' )।

উদাহরণস্বরূপ, যদি আপনি বলে

… ssh … 'echo orangeis $ORANGE'

তারপর ssh দেখছে

echo orangeis $ORANGE

এবং রিমোট সিস্টেম যে পাঠানো। এটি রিমোট সিস্টেমে শেলকে আউটপুট করে

orangeis 

(শেষে একটি স্থান দিয়ে) কারণ আপনি দিতে কিছু করেনি ORANGE একটি মান (অথবা, যদি আপনি কিছু করেন, এটি কাজ করে না)।

তুমি বলো

আমি মুদ্রণ করতে চান

  getId=1; echo 1; ORANGE=2; echo 1; …

যা আপনি স্পষ্টভাবে বোঝেন না। আপনি যদি মুদ্রণ করতে চান মানে

getId=1
1
2
  ︙

ভালো কিছু চেষ্টা করুন

… ssh … ' কমলা = 1;  getId = "$ কমলা";  echo "getId = $ getId";  $ ORANGE প্রতিধ্বনি; কমলা = $ ((কমলা +1)); $ ORANGE প্রতিধ্বনি; ... " 



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

echo "$ORANGE" > orange.txt

আপনি তারপর একটি কমান্ডের সাথে এই মানটি পুনরুদ্ধার করতে পারেন

read ORANGE < orange.txt

অথবা

ORANGE=$(cat orange.txt)

একটি সামান্য ভিন্ন পদ্ধতির সঙ্গে আপনার মান সংরক্ষণ করা হবে

echo "ORANGE=\"$ORANGE\"" > value.sh

এবং তারপর সঙ্গে এটি পুনরুদ্ধার

 value.sh 

IMNSHO, এটি বিশেষ করে আপনার ব্যবহার জ্ঞান না .bash_profile আপনি যদি প্রায়শই তাদের সংশোধন করতে থাকেন তবে এই মানগুলি সংরক্ষণ করুন।

আপনি ব্যবহার করা উচিত মনে রাখবেন >> একটি ফাইল যোগ করুন এবং >| একটি বিদ্যমান ফাইল overwrite।


আমি এটি পুনর্বিবেচনা করি। যদি আপনার উত্তরের শেষ লাইনের মত, যখন একটি নতুন এসএসএস সংযোগ শুরু হয়, এটি প্রথম এসএএস সংযোগে ORANGE সংজ্ঞায়িত করা যাবে না, তাই আমি একটি সিস্টেম পরিবর্তনশীল সংজ্ঞায়িত করতে চাই যা প্রতিটি এসএসএস সংযোগ অ্যাক্সেস এবং সংশোধন করতে পারে গতিবিদ্যা। প্রশ্ন শেষে দেখুন, আমি ব্যবহার। । ~ / .bash_profile ', তারপর মান পেতে।
orange

শেল ভেরিয়েবল ক্ষণস্থায়ী হয়। আপনি টাইপ করুন PURPLE=17 অথবা ZAPHOD=42 একটি শেলের জন্য, এবং তারপর লগআউট এবং আবার লগইন করুন, ঐ মান চলে যাবে। একইভাবে, পৃথক ssh সেশন হয় আলাদা (উদাঃ, যদি আপনি করেন ssh cd /foo এবং তারপর অন্য কাজ ssh কমান্ড, আপনি আপনার হোম ডিরেক্টরির মধ্যে ফিরে আসবেন - শেল রাষ্ট্র সেশনে জুড়ে সংরক্ষিত হয় না)। কিন্তু আরো তথ্যের জন্য আমার উত্তর দেখুন।
Scott

আমার প্রশ্নটি আবার সম্পাদনা করার জন্য আপনার সময় নষ্ট করার জন্য দুঃখিত এবং এটি উত্তর দিন ... এবং অনেক ধন্যবাদ! উত্তরটি আমার ইচ্ছা!
orange
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.