ssh টার্গেটহোস্ট &; fg - কাজ করে না, তবে কেন?


1

আমি ssh সেশনের পিড পেতে পটভূমিতে (পটভূমিতে চলমান পিডটি প্রদর্শন করে) এবং ssh সেশনে ফিরে আসার এবং পাসওয়ার্ডটি প্রবর্তনের জন্য fg এর চেয়ে নিম্নোক্ত সংমিশ্রণটি চেষ্টা করছিলাম:

ssh targetHost &; fg

আমি নিম্নলিখিত ত্রুটি পেয়েছি:

-bash: syntax error near unexpected token `;'

কেন ";" এক্ষেত্রে প্রত্যাশা অনুযায়ী কাজ করবেন না?

আমার উদ্দেশ্যটি একটি ssh অধিবেশন শুরু করা এবং এর পিড জানুন এবং আমি যতটা সম্ভব কম লাইনে এটি করা দরকার। আমার বেশ কয়েকটি এসএস সেশন শুরু করতে হবে, সেগুলি পটভূমিতে রেখে এবং শেষে তাদের মেরে ফেলতে হবে - এজন্য আমার পিডস দরকার।


2
ssh targetHost & pid=$!; echo "$pid"
ভ্যালেন্টাইন বাজরামি

উত্তর:


2

আপনি দুটি পৃথক কেস মিশ্রণ করছেন:

  • foo ; bar ফু চলবে, এটি শেষ হওয়ার অপেক্ষা করুন এবং তারপরে বার চালান
  • foo & bar foo শুরু করবে, এটি পটভূমিতে রাখবে এবং সরাসরি বারের পরে শুরু করবে।

আপনি সিদ্ধান্ত নিতে হবে, হয় এক বা অন্য ব্যবহার করুন। আপনি দুটোই করতে পারবেন না। ;)

আপনার সমস্যা সমাধানের জন্য, আপনি কেবল ব্যাকগ্রাউন্ডে সমস্ত কাজ চালাতে পারেন এবং তারপরে jobপিডগুলি তালিকাবদ্ধ করতে ব্যবহার করতে পারেন :

michas@lenny:~$ sleep 10 &
[1] 18007
michas@lenny:~$ sleep 10 &
[2] 18011
michas@lenny:~$ sleep 10 &
[3] 18015
michas@lenny:~$ sleep 10 &
[4] 18019
michas@lenny:~$ sleep 10 &
[5] 18026
michas@lenny:~$ jobs -p
18007
18011
18015
18019
18026
michas@lenny:~$ 

কিল সিগন্যাল প্রেরণের জন্য আপনার অগত্যা পিডেরও দরকার নেই। উদাহরণস্বরূপ kill %1, প্রথম ব্যাকগ্রাউন্ড প্রক্রিয়াটি মেরে ফেলবে।


1

&;সর্বদা ভুল। আপনি যদি পটভূমিতে কোনও কমপ্যাক্ট ওয়ান-লাইনারে জিনিস চালাতে চান তবে ''; বাদ দিন; সম্পূর্ণরূপে এবং সহজভাবে &কমান্ডের মধ্যে ব্যবহার করুন।

for i in ./*; do my_command "$i" & done

# দেখুন http://mywiki.wooledge.org/BashPitfalls


1

অন্যরা কেন ইতিমধ্যে &;ব্যর্থ হয়েছে তা ইতিমধ্যে ব্যাখ্যা করে দিয়েছেন । আমি টি = ওটি চেয়েছিলাম যে শেষ পটভূমি প্রক্রিয়াটির পিআইডি হিসাবে সংরক্ষণ করা হয় $!। আপনি সর্বদা সর্বশেষ আদেশের পিআইডি অ্যাক্সেস করতে পারেন:

ssh targetHost & echo $!; fg

তাদের হত্যা হিসাবে, আপনি sshএই আদেশ দিয়ে সমস্ত সেশনটি হত্যা করতে পারেন :

pkill -x ssh

xকারণ pkillএবং pgrepপূর্ণ কমান্ড নাম মেলে, তাহলে এটি আপনাকে হত্যা করবে না নিশ্চিত করে sshdবা ssh-agent। আপনি যদি কেবল একটি নির্দিষ্ট মেশিনের সাথে সংযোগগুলি হত্যা করতে চান তবে আপনি এটি করতেও পারেন:

pkill $(pgrep -alx ssh | grep TARGET_IP | cut -d ' ' -f 1)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.