سؤال

في البرنامج النصي الخاص بي ، أقوم بتنفيذ بعض الأوامر كمستخدم آخر. أريد أن أتصل بوظيفة باش باستخدام 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'

وكل شيء يجب أن يعمل بشكل جيد. أتمنى أن يساعدك هذا :)

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