আমি কাজটি স্থগিত করার এবং তারপর Ctrl-Z bgক্রমটি খুব বেশি চালিয়ে যেতে দেওয়ার এই প্যাটার্নটি অনুসরণ করি ।
আমি ভাবছিলাম যে একা কী চাপতে সংকোচনের কোনও উপায় আছে?
আমার শেল zsh
আমি কাজটি স্থগিত করার এবং তারপর Ctrl-Z bgক্রমটি খুব বেশি চালিয়ে যেতে দেওয়ার এই প্যাটার্নটি অনুসরণ করি ।
আমি ভাবছিলাম যে একা কী চাপতে সংকোচনের কোনও উপায় আছে?
আমার শেল zsh
উত্তর:
Ctrl+ + Zক্রম, টার্মিনাল দ্বারা পরিচালিত হয় শেল দ্বারা নয়। (দরকারী ব্যাকগ্রাউন্ড: 'টার্মিনাল', 'শেল', 'টিটি' এবং 'কনসোল' এর মধ্যে ঠিক পার্থক্য কী? )
কেবলমাত্র একটি ছোট, অ-এক্সটেনসিবল ফাংশন একটি টার্মিনালের কীতে আবদ্ধ হতে পারে । আপনি এই ফাংশনগুলিতে আবদ্ধ কীগুলি কাস্টমাইজ করতে পারেন তবে অন্য ফাংশন যুক্ত করতে পারেন না। এই ফাংশনগুলি তিনটি বিভাগে পড়ে:
eof
, Ctrl+ D), লাইনের শেষ ( eol
, Ctrl+ M), বাম অক্ষর মুছে দিন ( erase
, Ctrl+ H), বাম মুছে দিন ( werase
, Ctrl+ W), মুছে ফেলুন লাইন ( kill
, Ctrl+ U)।stop
( Ctrl+ S), start
( Ctrl+ Q)। কেবলমাত্র পুরানো সিরিয়াল টার্মিনালগুলিতে দরকারী যা অক্ষরগুলি হ্রাস করে যখন টার্মিনাল কম্পিউটারের সাথে বা তদ্বিপরীত রাখতে পারে না।intr
, Ctrl+ C), জোর করে ছেড়ে দিন ( quit
, Ctrl+ \), সাসপেন্ড ( Ctrl+ Z)।লিনাক্স সহ কয়েকটি সিস্টেম সেই তালিকাটি প্রসারিত করে, তবে আমি ব্যাকগ্রাউন্ডিং অন্তর্ভুক্ত এমন কোনওটি দেখিনি। নোট করুন যে এটি কার্নেলের টার্মিনাল ড্রাইভার এবং টার্মিনাল এমুলেটর উভয়ই সমর্থন করতে পারে। সুতরাং আপনাকে স্থগিতকরণের কাজ করতে হবে, যা অগ্রভাগের কাজটি একটি SIGTSTP সিগন্যাল প্রেরণ করে । অগ্রভাগের কাজের নেতার অভিভাবক প্রক্রিয়াতে এটি একটি SIGCHLD ট্রিগার করে , যা সাধারণত শেল। শেলটি যখন SIGCHLD পেয়েছিল তখন এটি waitpid
কেন বিজ্ঞাপিত হয়েছে তা নির্ধারণ করার জন্য ফোন করে এবং একটি পটভূমি কাজ স্থগিত করা হয়েছে তা সনাক্ত করার পরে এটি একটি বিজ্ঞপ্তি (যেমন [1] + 12345 suspended mycommand
) এবং একটি নতুন প্রম্পট প্রদর্শন করে disp
আপনি SIGCONT
অগ্রভাগের কাজটিতে একটি সংকেত প্রেরণের জন্য শেলটি প্রোগ্রাম করতে পারেন । আমি মনে করি না যে এর জন্য zsh এর একটি হুক রয়েছে, আপনার উত্স কোডটি প্যাচ করা দরকার। এবং জেএসএসের জানার কোনও উপায় নেই যে আপনি আসলেই প্রোগ্রামটি বাধাগ্রস্থ করতে চেয়েছিলেন কিনা (উফ, এই প্রোগ্রামটি ভুল কাজটি করতে পারে, আমি এটি বাছাই করার সময় এটিকে স্থগিত করি) বা ব্যাকগ্রাউন্ডে to
আমি যা করি তা হল বর্তমান কাজ ( ) এর পটভূমিতে zsh এ Ctrl+ Zকী সিকোয়েন্স সেট করা %%
। এইভাবে, আমি Ctrl+ Z Ctrl+ টিপে পটভূমিতে অগ্রভাগের কাজটি পাঠাতে পারি Z। আমি এটা আছি করার সময়, আমি Ctrl+ + Zযখন বর্তমান ইনপুট লাইন ফাঁকা নয় অন্যথায় দরকারী কিছু (তাই আমি না শুধু ফিরে একটি subprocess থেকে আসা): "স্থগিত" বর্তমান ইনপুট লাইন, আমাকে অন্য কমান্ড টাইপ করতে সক্ষম হবেন , তারপরে বাধা লাইনটি ইনপুট বাফারটিতে ফিরে যায়।
fancy-ctrl-z () {
if [[ $#BUFFER -eq 0 ]]; then
bg
zle redisplay
else
zle push-input
fi
}
zle -N fancy-ctrl-z
bindkey '^Z' fancy-ctrl-z
উপরের zsh এর মতো ^ z ^ z ব্যাশে সম্ভব, যদিও এটি কিছুটা ক্লডজি এবং আমি এটি দীর্ঘকাল চালিত না:
"\C-z": "bg\n"
সুতরাং কমান্ড চালিত হওয়ার পরে স্থগিতের জন্য ^ z চালু করা হবে, তারপরে ব্যাশ প্রম্পটের জন্য বন্ধ করা হবে।
সমাধানটি পেয়েছি, ঠিক আমি যা চাই তা নয় বরং এখান থেকে ঘষুন htt /superuser//a/161922/35223
খালি কমান্ড লাইনে বিজি চালায় (যাতে Ctrl + Z Ctrl + Z একটি প্রোগ্রাম স্থগিত করে এবং সাথে সাথে এটিকে ব্যাকগ্রাউন্ডে পুনরায় শুরু করে)।
Ctrl+Z
কল করা bg
, আমি একটি খালি খালি ইনপুট লাইন সনাক্ত করার বিষয়ে নিশ্চিত নই)।
এই কমান্ডগুলি কি আপনি প্রথমদিকে অগ্রভাগে চালাতে চেয়েছিলেন এবং তারপরে পটভূমিতে স্যুইচ করতে চান? এটি করার সহজ উপায় আছে কিনা তা আমি জানি না। তবে আপনি যদি কমান্ডগুলি চালনা করতে চান যা প্রারম্ভিক পটভূমিতে থাকবে তবে আপনি কেবল লাইনের শেষে একটি এম্পারস্যান্ড যুক্ত করতে পারেন। উদাহরণস্বরূপ, ping google.com &
পটভূমিতে pinging শুরু হবে; আপনি টাইপ না করে আপনি এটির সাথে ইন্টারঅ্যাক্ট করতে পারবেন না fg
।