وظيفة فخ عن طريق تمرير الحجج?
سؤال
لقد تم البحث في كل مكان ، ولقد جئت إلى الاعتقاد بأنه لا توجد وسيلة للقيام بذلك بخلاف وجود المتغيرات العالمية ولكن أعتقد أن المعلم في 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 وسائط) يتم استدعاؤها.