سؤال
في البرنامج النصي الخاص بي ، أقوم بتنفيذ بعض الأوامر كمستخدم آخر. أريد أن أتصل بوظيفة باش باستخدام su
.
my_function()
{
do_something
}
su username -c "my_function"
البرنامج النصي أعلاه لا يعمل. بالطبع، my_function
لم يتم تعريفه بالداخل su
. فكرة واحدة لدي هي وضع الوظيفة في ملف منفصل. هل لديك فكرة أفضل تتجنب صنع ملف آخر؟
المحلول
يمكنك تصدير الوظيفة لجعلها متاحة إلى Subshell:
export -f my_function
su username -c "my_function"
نصائح أخرى
يمكنك تمكين "sudo" في نظامك ، واستخدام ذلك بدلاً من ذلك.
يجب أن يكون لديك الوظيفة في نفس النطاق حيث تستخدمها. لذلك إما أن تضع الوظيفة داخل عروض الأسعار ، أو ضع الوظيفة في برنامج نصي منفصل ، ثم تقوم بتشغيله مع SU -C.
هناك طريقة أخرى يمكن أن تكون هناك حالات وتمرير معلمة إلى البرنامج النصي المنفذ. يمكن أن يكون مثال: أولاً قم بعمل ملف يسمى "script.sh". ثم أدخل هذا الرمز فيه:
#!/bin/sh
my_function() {
echo "this is my function."
}
my_second_function() {
echo "this is my second function."
}
case "$1" in
'do_my_function')
my_function
;;
'do_my_second_function')
my_second_function
;;
*) #default execute
my_function
esac
بعد إضافة الرمز أعلاه ، قم بتشغيل هذه الأوامر لرؤيتها في العمل:
root@shell:/# chmod +x script.sh #This will make the file executable
root@shell:/# ./script.sh #This will run the script without any parameters, triggering the default action.
this is my function.
root@shell:/# ./script.sh do_my_second_function #Executing the script with parameter
this function is my second one.
root@shell:/#
لجعل هذا العمل كما تحتاج ستحتاج فقط إلى الجري
su username -c '/path/to/script.sh do_my_second_function'
وكل شيء يجب أن يعمل بشكل جيد. أتمنى أن يساعدك هذا :)