قضية قذيفة:الاسم المستعار لا يتوسع
سؤال
لدي المشكلة التالية:لدي العديد من البرامج النصية للاختبار التي يتم تشغيلها حاليًا باستخدام مجموعة أدوات MKS.تمكنا من تشغيل تلك البرامج النصية باستخدام قذيفة مينغو (MSYS) ولكن هناك نصوصًا أخرى تستفيد من بعضها alias
es المضمنة في MKS Toolkit وليست في bash.
المشكلة هي أنه لا أحد يريد تغيير تلك البرامج النصية، ولا حتى تلقائيًا باستخدام برنامج نصي.هذا يعني أنه يجب علي تحديد تلك الأسماء المستعارة واستخدامها.لقد حاولت تحديد الأسماء المستعارة في ملف "/etc/profile" الخاص بـ msys Shell ولكن دون أي نجاح.لقد حاولت أيضا استخدام shopt -s expand_aliases
(في "/etc/profile") ولكن هذا لا يعمل أيضًا.
هل يمكن لأي شخص مشاركة فكرة حول كيفية القيام بذلك.ضع في اعتبارك أن البرامج النصية الحالية يجب أن تظل كما هي.
أي أفكار أو أفكار هي موضع ترحيب.
شكرًا
المحلول 2
هذه الإجابة أعطاني الحل.أنها تنطوي على تحديد المتغير BASH_ENV
قبل التنفيذ
bash script_name.sh
سيشير BASH_ENV إلى البرنامج النصي الذي يضبط بيئة الصدفة.في حالتي، لتصدير alias
es وكذلك الوظائف المطلوبة يبدو البرنامج النصي كما يلي:
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).