كيفية تشغيل "قرص مضغوط" في البرنامج النصي Shell والبقاء هناك بعد الانتهاء من البرنامج النصي؟

StackOverflow https://stackoverflow.com/questions/3879431

  •  28-09-2019
  •  | 
  •  

سؤال

لقد استخدمت "دليل التغيير" في البرنامج النصي الخاص بي (باش)

#!/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 ، أي أنه له نفس التأثير الذي كتبته كل سطر على سطر الأوامر لقذيفة تسجيل الدخول الخاصة بك وتنفيذها من هناك. لذلك ، عندما ينتهي البرنامج النصي بعد القرص المضغوط ، يبقى في هذا الدليل.

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