كيفية تشغيل "قرص مضغوط" في البرنامج النصي Shell والبقاء هناك بعد الانتهاء من البرنامج النصي؟
سؤال
لقد استخدمت "دليل التغيير" في البرنامج النصي الخاص بي (باش)
#!/bin/bash
alias mycd='cd some_place'
mycd
pwd
pwd
مطبوعات some_place
بشكل صحيح ، ولكن بعد الانتهاء من البرنامج النصي ، لا يتغير دليل العمل الحالي الخاص بي.
هل من الممكن تغيير طريقي عن طريق البرنامج النصي؟
المحلول
تحتاج إلى مصدر الملف على النحو التالي:
. myfile.sh
أو
source myfile.sh
دون الحصول على تغييرات سيحدث في القشرة الفرعية وليس في قذيفة الوالدين التي تستدعي البرنامج النصي. ولكن عندما تصدر ملفًا ، يتم تنفيذ السطور الموجودة في الملف كما لو كانت مكتوبًا في سطر الأوامر.
نصائح أخرى
يتم تشغيل البرنامج النصي في فرع منفصل. يغير هذا الدليل الفرعي ، وليس القشرة التي تقوم بتشغيلها. حل ممكن هو source
البرنامج النصي بدلاً من تشغيله:
# Bash
source yourscript.sh
# or POSIX sh
. yourscript.sh
على الرغم من أن مصادر البرنامج النصي الذي تريد تشغيله هو حل واحد ، فيجب أن تدرك أن هذا البرنامج النصي يمكن أن يعدل مباشرة بيئة قشرة الحالية. كما أنه لم يعد من الممكن تمرير الحجج بعد الآن.
هناك طريقة أخرى للقيام بها ، وهي تنفيذ البرنامج النصي كدالة في باش.
function cdbm() {
cd whereever_you_want_to_go
echo arguments to the functions were $1, $2, ...
}
يتم استخدام هذه التقنية بواسطة AutoJump:http://github.com/joelthelion/autojump/wikiلتزويدك بتعلم مرجعية دليل قذيفة.
يمكن تحقيقه عن طريق المصادر. يتم تنفيذ المصادر بشكل أساسي في نفس القشرة بينما التنفيذ الطبيعي (sh test.sh
أو ./test.sh
) سيقوم بإنشاء قذيفة فرعية وتنفيذ البرنامج النصي هناك.
Test.sh
cd development/
ls
# Do whatever you want.
نفذ - اعدم test.sh
بواسطة
source test.sh
.
هو أقصر تدوين ل source
. لذلك يمكنك أيضا القيام به
. test.sh
سيؤدي ذلك إلى تنفيذ البرنامج النصي وتغيير دليل shell الحالي إلى development/
.
كلما قمت بتشغيل برنامج نصي على قذيفة تسجيل الدخول الخاصة بك ، يتم إنتاج عملية فرعية جديدة ويتم تنفيذ البرنامج النصي في Subshell.Ence يكمل البرنامج النصي ، ويخرج Subshell ويتم إرجاعك إلى قذيفة تسجيل الدخول. البرنامج النصي ، يتم تغيير الدليل إلى المسار المحدد بواسطة القرص المضغوط ، ولكن بحلول الوقت الذي ينتهي فيه البرنامج النصي ، تعود إلى قذيفة تسجيل الدخول إلى دليل العمل من حيث بدأت البرنامج النصي.
طريقة التغلب على هذا هو الاستخدام ،
source yourscript.sh
ما هو المصدر الذي يقوم به هو تنفيذ البرنامج النصي كنص TCL ، أي أنه له نفس التأثير الذي كتبته كل سطر على سطر الأوامر لقذيفة تسجيل الدخول الخاصة بك وتنفيذها من هناك. لذلك ، عندما ينتهي البرنامج النصي بعد القرص المضغوط ، يبقى في هذا الدليل.