হাইজ্যাকিং প্রম্পট ছাড়াই পটভূমি প্রক্রিয়া থেকে অগ্রগতি প্রতিধ্বনিত


10

সাধারণ লিপিটি বিবেচনা করুন hello:

#!/bin/bash

echo 'hello world!'

এখন ব্যশ থেকে যদি আমি ব্যাকগ্রাউন্ডে এটি চালানোর চেষ্টা করি:

$ hello &
[1] 12345
$ hello world!
 <--- prompt is stuck here until I hit enter!
[1]+ Done
$  <--- prompt back to normal

আমি বরং কি দেখতে চাই:

$ hello &
[1] 12345
[1]+ hello world!
[1]+ Done
$  <--- prompt normal the whole time

আমি কীভাবে আচরণটি পরিবর্তন করতে পারি?

উত্তর:


13

এটি টাইমিংয়ের বিষয়: ব্যাশ helloব্যাকগ্রাউন্ডে কমান্ডটি প্রবর্তন করে , তারপরে এটি আপনাকে একটি নতুন কমান্ড প্রবেশ করার জন্য একটি প্রম্পট প্রদর্শন করে, তারপরে পটভূমি কমান্ডটি কিছু আউটপুট মুদ্রণ করে। আপনি যখন পরবর্তী কমান্ড লাইনটি প্রবেশ করেন (খালি কমান্ড লাইন, আপনি যদি কেবল চাপুন Enter), ব্যাশ ব্যাকগ্রাউন্ড কাজ শেষ হয়ে গেছে এমন বিজ্ঞপ্তিটি প্রদর্শন করে, তারপরের পরবর্তী প্রম্পটটি।

আপনি যে স্ক্রিপ্ট দিয়ে শুরু করছেন তা পরীক্ষা করতে sleep 3এবং পটভূমিতে স্ক্রিপ্টটি চালু করার ঠিক পরে টাইপ করা শুরু করতে পারেন, আপনি কী গতিতে অনুসরণ করতে পারেন তা দেখার জন্য।

notifyবিকল্পটি সেট করে কোনও পটভূমি কাজ শেষ হলে আপনি অবিলম্বে বাশকে আপনাকে অবহিত করতে পারেন set -b। তারপরে আপনি দেখতে পাবেন:

$ set -b
$ hello &
[1] 12345
$ hello world!
[1]+ Done

বাশ এই ক্ষেত্রে প্রম্পটটি পুনরায় আঁকবে না। আপনি এখনও প্রম্পট লাইনে একটি কমান্ড লাইন সম্পাদনা করছেন যা পটভূমির কাজ মুদ্রণের আগে উপস্থিত হয়েছিল hello world!। আপনি Esc 1 Ctrl+ টিপে বর্তমান লাইনটি আবার অঙ্কন করতে পারেন L। আপনি কমান্ডটি redraw-current-lineআরও সুবিধাজনক কীতে আবদ্ধ করতে চাইতে পারেন ; উদাহরণস্বরূপ, বর্তমান লাইনটি Ctrl+ Lপুনরায় আঁকতে এবং Ctrl+ Alt+ Lস্ক্রিনটি সাফ করতে আপনার নীচের লাইনগুলি যুক্ত করুন ~/.inputrc:

"\C-l": redraw-current-line
"\e\C-l": clear-screen

আমি বাশকে স্বয়ংক্রিয়ভাবে প্রম্পট লাইনটি পুনরায় আঁকানোর কোনও উপায় জানি না। Zsh এটি ডিফল্টরূপে করে।

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