سؤال

لدي المشكلة التالية:لدي العديد من البرامج النصية للاختبار التي يتم تشغيلها حاليًا باستخدام مجموعة أدوات MKS.تمكنا من تشغيل تلك البرامج النصية باستخدام قذيفة مينغو (MSYS) ولكن هناك نصوصًا أخرى تستفيد من بعضها aliases المضمنة في MKS Toolkit وليست في bash.

المشكلة هي أنه لا أحد يريد تغيير تلك البرامج النصية، ولا حتى تلقائيًا باستخدام برنامج نصي.هذا يعني أنه يجب علي تحديد تلك الأسماء المستعارة واستخدامها.لقد حاولت تحديد الأسماء المستعارة في ملف "/etc/profile" الخاص بـ msys Shell ولكن دون أي نجاح.لقد حاولت أيضا استخدام shopt -s expand_aliases (في "/etc/profile") ولكن هذا لا يعمل أيضًا.

هل يمكن لأي شخص مشاركة فكرة حول كيفية القيام بذلك.ضع في اعتبارك أن البرامج النصية الحالية يجب أن تظل كما هي.

أي أفكار أو أفكار هي موضع ترحيب.

شكرًا

هل كانت مفيدة؟

المحلول 2

هذه الإجابة أعطاني الحل.أنها تنطوي على تحديد المتغير BASH_ENV قبل التنفيذ

bash script_name.sh

سيشير BASH_ENV إلى البرنامج النصي الذي يضبط بيئة الصدفة.في حالتي، لتصدير aliases وكذلك الوظائف المطلوبة يبدو البرنامج النصي كما يلي:

shopt -s expand_aliases

alias my_alias="echo my_alias"

function MyFunction {
    echo "MyFunction(DUMB):" $* 
}

export -f MyFunction

نصائح أخرى

ال /etc/profile يتم الحصول عليه فقط لقذائف تسجيل الدخول.إذا كنت تريد الأسماء المستعارة في البرنامج النصي الخاص بك، فيجب عليك وضعها في ملف منفصل ومصدرها في البرنامج النصي (البرامج النصية) التي تحتاج إليها.على سبيل المثال:

الأسماء المستعارة.sh:

alias walrus="echo coo coo cah joo"

script.sh:

#!/bin/bash

shopt -s expand_aliases
. aliases.sh

walrus

وثم

$ ./script.sh
coo coo cah joo

ربما تكون هذه هي الطريقة الأكثر منطقية للقيام بذلك.إذا كنت تصر على عدم تغيير البرامج النصية على الاطلاق, ، فقد تتمكن من الإفلات من تنفيذها بشكل غير مباشر مثل:

bash --rcfile aliases.sh -i script.sh

سيؤدي ذلك إلى إخبار bash بتنفيذ غلاف تفاعلي (وبالتالي توسيع الأسماء المستعارة ومصدر البرنامج النصي للأسماء المستعارة قبل تنفيذ script.sh).

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