বিভিন্ন ডিরেক্টরিতে ssh -t এবং ssh জমি


0

আমি একটি রিমোট সার্ভারে প্রবেশ করতে চাই এবং কমান্ডের একটি সিরিজ চালাতে চাই (যেমন কিছু কিছু এলোমেলো কমান্ড)

touch foo.txt
echo 'bar' > foo.txt
cd ..
ls

এবং এই সংযোগে থাকুন।

কেউ আমাকে ব্যবহার করার পরামর্শ দিয়েছে ssh -t $server "commands; bash"। এটি কাজ করেছে তবে এটি আমাকে ঠিক করা থেকে আলাদা ডিরেক্টরিতে নিয়ে গেছে ssh $server। কোনও ধারণা কেন এমন হয়?

(আমি একটি রেপোতে বিদ্যমান কোড অধ্যয়ন করছি, তাই আমি আশ্চর্য হয়েছি যে এটি ঘটানোর পদ্ধতিটি কী এবং কেন)

উত্তর:


0

কোনও ধারণা কেন এমন হয়?

হতে পারে আপনার commandsঅন্তর্ভুক্ত cd। আপনি নির্বাহ করছেন commands; bash, তাই bashযে কোনও ডিরেক্টরি commandsশেষ হতে শুরু করুন।

সুস্পষ্ট সমাধান হ'ল cdআপনি প্রার্থনা করার ঠিক আগে ফিরে আসা bash। চেষ্টা

ssh -t $server 'commands; cd "$HOME"; exec bash -l'

নোট:

  • একক উদ্ধৃতি $HOMEস্থানীয়ভাবে সম্প্রসারণ রোধ করে ; আপনি যদি commandsস্থানীয়ভাবে প্রসারিত ভেরিয়েবলগুলি অন্তর্ভুক্ত করতে চান তবে উদ্ধৃতিগুলি (যেমন "commands with $var; "'cd "$HOME"; exec bash -l') মেশান ।
  • exec, কারণ আপনার আর দূরবর্তী দিকে প্যারেন্ট শেলের প্রয়োজন নেই (বা আপনি কি?)।
  • -l(সমতুল্য --login) কারণ একমাত্র ssh $serverএকটি লগইন শেল তৈরি করে এবং আপনি চান আপনার পুরো কমান্ডটি একই রকম আচরণ করতে act লগইন শেল হিসাবে ব্যাশ করুন নন-লগইন শেল হিসাবে পৃথক ফাইল (গুলি) থেকে শুরু করে /etc/profile; নিয়মগুলি কিছুটা জটিল, দেখুন man 1 bash, দেখুন INVOCATION। যদি এই ফাইলগুলির মধ্যে একটি cdঅন্য ডিরেক্টরিতে সম্পাদন করে commandsতবে ডিরেক্টরিটি পরিবর্তন না করেও আপনি যা পান তা আপনি পেয়ে যাবেন। ডিরেক্টরিগুলি ("সঠিক" এক এবং "ভুল" একটি) কী তা আপনি বলেননি, সুতরাং এই "লুকানো" এর উদ্দেশ্য কী হতে পারে তা অনুমান করাও শক্ত cd

অথবা আপনি commandsএকটি সাব-শেল চালাতে পারেন । এটি প্যারেন্ট শেলের কার্যকরী ডিরেক্টরিকে প্রভাবিত করবে না তাই পিতামাতার শেলটি bashযেখানেই শুরু হবে সেখানেই শুরু হবে:

ssh -t $server '(commands); exec bash -l'

আপনি কি করতে পারেন তার উপর নির্ভর করে একটি সমাধান বা অন্যটিকে পছন্দ করতে commandsপারেন। উদাহরণস্বরূপ, যদি commandsদূরবর্তী পার্শ্বে তাদের শেলের পরিবেশ পরিবর্তন করে তবে সেগুলি একটি সাব-শেইলে চালানো হয় বা ফাইনালের পক্ষে কোনও পার্থক্য তৈরি করে না bash


উত্তর দেওয়ার জন্য আপনাকে ধন্যবাদ! cdডিরেক্টরিটি পরিবর্তন করে এমন আদেশগুলি নয় । ডিরেক্টরিটি আগে পৃথক হয় cd। দেখে মনে হচ্ছে কোনও স্ক্রিপ্ট ট্রিগার / এক্সিকিউট করা হয় যদি আমি সাধারণত চালাই তবে আমি ব্যবহার করার সময় ট্রিগার হয় না ssh -t। কোন ধারণা কেন?
কেভিন তিনি 18

@ কেভিনহেই এটি কি বাশ লগইন শেল কিনা তার উপর নির্ভর করে?
কামিল ম্যাকিয়েরোস্কি

আমি কেবলমাত্র একটি নির্দিষ্ট ডিরেক্টরিতে অবতরণ করতে সক্ষম ssh $server। আমি এটা ছাড়া অন্য কিছু করতে পারেন, যেমন ssh $server 'pwd'বা ssh -t $server 'pwd; bash', পরিশ্রমী ডিরেক্টরি ভিন্ন।
কেভিন তিনি

@ কেভিনহ ওকে, দয়া করে নিশ্চিত করুন "এর বাইরে অন্য কিছু" অন্তর্ভুক্ত রয়েছে ssh -t $server 'pwd; bash -l'
কামিল ম্যাকিয়েরোস্কি

ওহ bash -lআমাকে একই স্থান হিসেবে আমি করেনি অবতরণ ssh $server। তুমি কি এটা ব্যাখ্যা করতে পারবে? ধন্যবাদ!
কেভিন তিনি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.