( exec sh -i 3<<SCRIPT 4<&0 <&3 ⏎
echo "do this thing"
echo "do that thing"
exec 3>&- <&4
SCRIPT
)
স্ক্রিপ্ট থেকে এটি আরও ভালভাবে করা হয়েছে exec $0.
বা এর সাথে বা যদি সেই ফাইল বর্ণনাকারীদের মধ্যে একটি যদি টার্মিনাল ডিভাইসের দিকে নির্দেশ দেয় যা বর্তমানে ব্যবহৃত হচ্ছে না তবে এটি সাহায্য করবে - আপনি মনে রাখতে হবে, অন্যান্য প্রক্রিয়াও সেই টার্মিনালটি পরীক্ষা করতে চায়।
এবং যাইহোক, যদি আপনার লক্ষ্যটি হয়, যেমন আমি এটি ধরে নিয়েছি, স্ক্রিপ্টটির পরিবেশনাটি কার্যকর করার পরে এটির পরিবেশ সংরক্ষণ করা, আপনি সম্ভবত আরও অনেক ভাল পরিবেশিত হতে চাই:
. ./script
শেল এর .dot
এবং bash's source
না এক এবং একই - শেল এর .dot
POSIX একটি বিশেষ শেল builtin হিসাবে নির্দিষ্ট রয়েছে এবং ঘনিষ্ঠ নিশ্চিত হচ্ছে হিসাবে আপনি পেতে পারেন সুতরাং, যদিও এই কোন মানে একটি গ্যারান্টি সেখানে হবে ...
যদিও উপরেরটি আপনার সামান্য সমস্যা নিয়ে প্রত্যাশা মতো করা উচিত। উদাহরণস্বরূপ, আপনি:
( exec sh -i 3<<SCRIPT 4<&0 <&3 ⏎
echo "do this thing"
echo "do that thing"
$(cat /path/to/script)
exec 3>&- <&4
SCRIPT
)
শেলটি আপনার স্ক্রিপ্টটি পরিচালনা করবে এবং আপনাকে ইন্টারেক্টিভ প্রম্পটে ফিরিয়ে দেবে - যতক্ষণ না আপনি exit
নিজের স্ক্রিপ্ট থেকে শেলটি ইঙ্গিত করবেন না, বা আপনার প্রক্রিয়াটি ব্যাকগ্রাউন্ড করবেন - এটি আপনার আই / ও-র সাথে লিঙ্ক করবে/dev/null.
ডেমো:
% printf 'echo "%s"\n' "These lines will print out as echo" \
"statements run from my interactive shell." \
"This will occur before I'm given the prompt." >|/tmp/script
% ( exec sh -i 3<<SCRIPT 4<&0 <&3
echo "do this thing"
echo "do that thing"
$(cat /tmp/script)
exec 3>&- <&4
SCRIPT
)
sh-4.3$ echo "do this thing"
do this thing
sh-4.3$ echo "do that thing"
do that thing
sh-4.3$ echo "These lines will print out as echo"
These lines will print out as echo
sh-4.3$ echo "statements run from my interactive shell."
statements run from my interactive shell.
sh-4.3$ echo "This will occur before I'm given the prompt."
This will occur before I'm given the prompt.
sh-4.3$ exec 3>&- <&4
sh-4.3$
অনেক JOBS
এটি আমার অভিমত যে শেলের বিল্ট-ইন টাস্ক ম্যানেজমেন্ট বিকল্পগুলির সাথে আপনার আরও কিছুটা পরিচিত হওয়া উচিত। @ কিউই এবং জিলাগ্রে উভয়ই তাদের উত্তরগুলিতে ইতিমধ্যে এটি স্পষ্ট করে ফেলেছে তবে এটি আরও বিশদটির নিশ্চয়তা দিতে পারে। এবং আমি ইতিমধ্যে POSIX-নির্দিষ্ট বিশেষ শেল বিল্ট-ইন উল্লিখিত করেছি, কিন্তু set, jobs, fg,
ও bg
আরো কয়েকটি আছে, এবং, যেমন অন্য উত্তর প্রমান trap
এবং kill
আরও এখনও দুটি আছে।
আপনি যদি ইতিমধ্যে একই সাথে ব্যাকগ্রাউন্ড প্রক্রিয়াগুলির স্থিতিতে তাত্ক্ষণিক বিজ্ঞপ্তিগুলি না পেয়ে থাকেন তবে এটি হ'ল আপনার বর্তমান শেল বিকল্পগুলি পসিক্স-নির্দিষ্ট ডিফল্টের জন্য সেট করা আছে তবে পরিবর্তে -m
আপনি এগুলি অবিচ্ছিন্নভাবে পেতে পারেন set -b
:
% man set
−b This option shall be supported if the implementation supports the
User Portability Utilities option. It shall cause the shell to
notify the user asynchronously of background job completions. The
following message is written to standard error:
"[%d]%c %s%s\n", <job-number>, <current>, <status>, <job-name>
where the fields shall be as follows:
<current> The character '+' identifies the job that would be
used as a default for the fg or bg utilities; this
job can also be specified using the job_id "%+" or
"%%". The character '−' identifies the job that
would become the default if the current default job
were to exit; this job can also be specified using
the job_id "%−". For other jobs, this field is a
<space>. At most one job can be identified with '+'
and at most one job can be identified with '−'. If
there is any suspended job, then the current job
shall be a suspended job. If there are at least two
suspended jobs, then the previous job also shall be a
−m This option shall be supported if the implementation supports the
User Portability Utilities option. All jobs shall be run in their
own process groups. Immediately before the shell issues a prompt
after completion of the background job, a message reporting the
exit status of the background job shall be written to standard
error. If a foreground job stops, the shell shall write a message
to standard error to that effect, formatted as described by the
jobs utility. In addition, if a job changes status other than
exiting (for example, if it stops for input or output or is
stopped by a SIGSTOP signal), the shell shall write a similar
message immediately prior to writing the next prompt. This option
is enabled by default for interactive shells.
ইউনিক্স-ভিত্তিক সিস্টেমগুলির একটি খুব মৌলিক বৈশিষ্ট্য হ্যান্ডলিং প্রক্রিয়া তাদের পদ্ধতি signals
। আমি একবার এই বিষয়ের উপর একটি আলোকিত নিবন্ধ পড়েছিলাম যা এই প্রক্রিয়াটির সাথে এখন গ্রহটির ডগলাস অ্যাডামসের বর্ণনার সাথে তুলনা করে:
"গ্যালাক্সি টু হিচাইকারের গাইডে, ডগলাস অ্যাডামস একটি অত্যন্ত নিস্তেজ গ্রহের কথা উল্লেখ করেছেন, সেখানে হতাশাগ্রস্ত মানুষের একগুচ্ছ এবং ধারালো দাঁতযুক্ত একটি নির্দিষ্ট জাতের প্রাণী রয়েছে যা মানুষের সাথে উরুতে খুব কঠোর কামড় দিয়ে যোগাযোগ করে। এটি আশ্চর্যজনক ইউএনআইএক্সের অনুরূপ, যেখানে কার্নেল তাদের পক্ষাঘাতগ্রস্থ বা মারাত্মক সংকেত প্রেরণ করে প্রক্রিয়াগুলির সাথে যোগাযোগ করে। প্রক্রিয়াগুলি কিছু সংকেতকে বাধা দিতে পারে এবং পরিস্থিতিটির সাথে খাপ খাইয়ে নিতে চেষ্টা করতে পারে, তবে বেশিরভাগই তা করে না। "
এটি উল্লেখ করা হয় kill signals
।
% kill -l
> HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS
কমপক্ষে আমার জন্য, উপরোক্ত উদ্ধৃতিটি অনেক প্রশ্নের উত্তর দিয়েছে। উদাহরণস্বরূপ, আমি সর্বদা এটি খুব অদ্ভুত এবং স্বজ্ঞাত হিসাবে বিবেচনা করতাম না যে যদি আমি কোনও dd
প্রক্রিয়াটি পর্যবেক্ষণ করতে চাই তবে আমার তা ছিল kill
। এটি পড়ার পরে তা বোঝা গেল।
আমি বলব যে তাদের বেশিরভাগই ভাল কারণে অভিযোজিত হওয়ার চেষ্টা করবেন না - এটির চেয়ে আরও বড় বিরক্তি আর কিছু হতে পারে যেহেতু তাদের টার্মিনালগুলিকে স্পর্শ করে এমন একগুচ্ছ প্রক্রিয়া যা আপনার বিকাশকারীরা ভেবেছিলেন যে আপনার পক্ষে গুরুত্বপূর্ণ হতে পারে ।
আপনার টার্মিনাল কনফিগারেশনের উপর নির্ভর করে (আপনার সাথে পরীক্ষা করতে পারবেন যা stty -a
) , CTRL+Z
সম্ভবত সেট একটা ফরওয়ার্ড হয় SIGTSTP
বর্তমান ফোরগ্রাউন্ড প্রক্রিয়া দলের নেতা, যা সম্ভবত আপনার শেল হয়, এবং যা এছাড়াও ডিফল্টরূপে কনফিগার করা উচিত trap
যে সংকেত এবং আপনার শেষ কমান্ড স্থগিত। আবার, @ জিলাগ্রে এবং @ কিউইয়ের উত্তরগুলি একসাথে দেখায়, আপনার পছন্দ অনুযায়ী এই উদ্দেশ্যে কার্যকারিতাটি তৈরি করতে আপনাকে কোনও বাধা দিচ্ছে না।
SCREEN JOBS
সুতরাং এই বৈশিষ্ট্যগুলির সুবিধা গ্রহণ করার জন্য এটি প্রত্যাশা করা হয় যে আপনি প্রথমে সেগুলি বুঝতে এবং তাদের নিজের হ্যান্ডেলিংটি আপনার নিজের প্রয়োজন অনুসারে কাস্টমাইজ করুন। উদাহরণস্বরূপ, আমি সবেমাত্র গিথুব-এ এই স্ক্রিনসিআরসি পেয়েছি যার জন্য screen
কী-বাইন্ডিংগুলি অন্তর্ভুক্ত রয়েছে SIGTSTP
:
# hitting 'C-z C-z' will run Ctrl+Z (SIGTSTP, suspend as usual)
bind ^Z stuff ^Z
# hitting 'C-z z' will suspend the screen client
bind z suspend
এটি শিশু screen
প্রক্রিয়া হিসাবে চালিত কোনও প্রক্রিয়া বা screen
আপনার ইচ্ছামতো শিশু প্রক্রিয়া নিজেই স্থগিত করা সহজ বিষয় হয়ে উঠবে ।
এবং ততক্ষণে:
% fg
বা:
% bg
আপনার পছন্দ অনুযায়ী প্রক্রিয়াটির অগ্রভাগ বা ব্যাকগ্রাউন্ড করবে Would jobs
বিল্ট-ইন আপনি যে কোনো সময়ে এই একটি তালিকা প্রদান করতে পারেন। -l
অপারেন্ড যুক্ত করাতে পিডের বিবরণ অন্তর্ভুক্ত থাকবে।