ট্র্যাপ কমান্ডে সিগন্যাল 0 কী?


12

আমি কীভাবে এসএসএইচ-এজেন্টের সাথে পাসওয়ার্ডহীন এসএসএইচ প্রমাণীকরণ সেট আপ করতে পারি এই গাইডটি অনুসরণ করছি ।

এস-এস-এজেন্ট শুরু করার জন্য লেখক নীচের কোডটির জন্য সুপারিশ করেছেন .bash_profile:

SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
    eval `$SSHAGENT $SSHAGENTARGS`
    trap "kill $SSH_AGENT_PID" 0
fi

আমি বুঝতে পারছি না কেন এটি সিগন্যালটি আটকাচ্ছে 0. মানব signal সংকেত অনুসারে এরকম কোনও সংকেত নেই।

এটি কি কেবল একটি টাইপো বা বাগ বা এটি সত্যিই কিছু অর্জন করে?

উত্তর:


19

থেকে ব্যাশ ম্যানুয়াল :

trap [-lp] [[arg] sigspec ...]

... একটি সিগস্পেক যদি এক্সিট (0) হয় তবে শেল থেকে প্রস্থান করার সময় কমান্ড আরগটি কার্যকর করা হয়।


13
সঠিক। যদি কোনও পাঠক প্রশ্নের শিরোনামের কারণে এখানে আসেন তবে মনে রাখবেন যে এটি 0শেল trapকমান্ডের অর্থ । সংকেত প্রেরণ করার সাথে সাথে kill0 এর সংকেত মানে হ'ল সর্বোপরি সংকেত না পাঠানো; এটি লক্ষ্য প্রক্রিয়াটির অস্তিত্ব পরীক্ষা করার একটি উপায়।
গিলস 'অসমাপ্ত হওয়া বন্ধ করুন'

@ ম্যাট: অনেক ধন্যবাদ আমি লোকটিকে 1 ফাঁদে পড়ছিলাম ...
ক্রিস্টোফ ওর্ম 14

1
তবে এটি তালিকার আউটপুটে নেই trap -l!
এম্পেটাম্যাচাইন

স্ক্রিপ্ট উত্সাহিত হলে আপনি কি দয়া করে কেসটিকে সম্বোধন করতে পারেন?
এরিক

1

@ ম্যাট যেমন তার উত্তরে দেখায়, trapকমান্ডে ব্যবহার করার সময় 0 এর একটি সিগস্পেক, trapস্ক্রিপ্টটি প্রস্থান করার সময় কমান্ডটি চালিত করবে ।

এই উদাহরণটি যা ঘটে তা চিত্রিত করে।

$ cat tr.bash 
#!/bin/bash

echo "PID: $$"

trap 'echo hi; exit 1' 0 1 2 15

while [ 1 ]; do
    sleep 3
done

যখন আমরা এটি চালাই:

$ ./tr.bash 
PID: 24086

এটি এখানে অনির্দিষ্টকালের জন্য অপেক্ষা করে বসে। অন্য উইন্ডোতে যদি আমরা এখন killএটিতে সংকেত প্রেরণ করি তবে আপনি দেখতে পাবেন যে একটি kill -0প্রক্রিয়াটি হত্যা করবে না, যদিও trapকমান্ডের মধ্যে সিগন্যাল 0 তালিকাভুক্ত রয়েছে ।

$ kill -0 $(pgrep tr.bash)
$

তবে আমরা যদি killস্ক্রিপ্টটি সিগন্যাল 1 ব্যবহার করে kill -1:

$ kill -1 $(pgrep tr.bash)
$

আমরা দেখতে পাবো যে স্ক্রিপ্টটি প্রস্থান করে এবং 2 বার "হাই" বার্তাটি প্রিন্ট করে। প্রথমটি সংকেত 1 এবং দ্বিতীয়টি কারণ স্ক্রিপ্টটি প্রস্থান করেছে।

$ ./tr.bash 
PID: 24086
hi
hi

0

শেলটি প্রস্থান করার সময় 0 এ ফাঁদটি চালানো হয়। এটি সর্বদা কার্যকর করা হয় এমন এক জায়গায় tmp ফাইলগুলি পরিষ্কার করার জন্য ব্যবহৃত হয়:

tmp, = / tmp / 'myscript। $$

trap 'rm -f $ tmp; প্রস্থান '0 1 2 15

do_a_bunch_of_stuff

প্রস্থান

ফাঁদ শেষে প্রস্থানটি সঠিক স্থিতি সহ ক্লিনআপে শেলটি প্রস্থান করে।

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