سؤال

لقد تم البحث في كل مكان ، ولقد جئت إلى الاعتقاد بأنه لا توجد وسيلة للقيام بذلك بخلاف وجود المتغيرات العالمية ولكن أعتقد أن المعلم في stackoverflow.com قد تكون قادرة على مساعدتي:

هل هناك أي طريقة في باش لاحتجاز وظيفة عن طريق تمرير الحجج إليها?
على سبيل المثال, trap <function_name> <arg_1> <arg_2> SIGINT?

هل كانت مفيدة؟

المحلول

trap يتيح لك تحديد أمر تعسفي (أو تسلسل الأوامر) ، ولكن عليك تمرير هذا الأمر كوسيطة واحدة.على سبيل المثال ، هذا:

trap 'foo bar baz | bip && fred barney ; wilma' SIGINT

سيتم تشغيل هذا:

foo bar baz | bip && fred barney ; wilma

كلما تتلقى قذيفة سيجينت.في حالتك ، يبدو أنك تريد:

trap '<function> <arg_1> <arg_2>' SIGINT

نصائح أخرى

ربما أنا سوء فهم لك ، ولكن ...هذا قانوني:

trap "cp /etc/passwd $HOME/p" SIGINT
trap 'cp /etc/passwd /tmp/p; echo wooo hoo' SIGINT

لست متأكدا من أنني أفهم بشكل صحيح ما تعنيه ، ولكن إذا كنت تريد أن تجعل معالج إشارة استدعاء وظيفة وتمريرها المعلمات, trap "function arg1 arg2" SIGNAL يجب أن تعمل.على سبيل المثال trap "ls -lh /" INT سوف يسبب السيطرة + ج في قذيفة الخاص بك يؤدي إلى ls -lh / (برنامج مع 2 وسائط) يتم استدعاؤها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top