تمرير الحجة إلى الاسم المستعار في باش [مكررة
-
27-09-2019 - |
سؤال
هذا السؤال لديه بالفعل إجابة هنا:
- جعل الاسم المستعار باش يأخذ المعلمة؟ 13 إجابة
هل من الممكن القيام بما يلي:
أريد تشغيل ما يلي:
mongodb bin/mongod
في بلدي bash_profile لدي
alias = "./path/to/mongodb/$1"
المحلول
سيتوسع الاسم المستعار إلى السلسلة التي يمثلها. أي شيء بعد الاسم المستعار سيظهر بعد توسعه دون الحاجة إلى أن يكون أو قادرًا على تمريره كوسيطات صريحة (على سبيل المثال $1
).
$ alias foo='/path/to/bar'
$ foo some args
سوف يتم توسيعها إلى
$ /path/to/bar some args
إذا كنت ترغب في استخدام الوسائط الصريحة ، فستحتاج إلى استخدام وظيفة
$ foo () { /path/to/bar "$@" fixed args; }
$ foo abc 123
سيتم تنفيذها كما لو كنت قد فعلت
$ /path/to/bar abc 123 fixed args
لإلغاء تحديد الاسم المستعار:
unalias foo
لإلغاء تحديد وظيفة:
unset -f foo
للاطلاع على النوع والتعريف (لكل اسم مستعار محدد أو كلمة رئيسية أو دالة أو ملف مدمج أو قابل للتنفيذ):
type -a foo
أو اكتب فقط (لأعلى أسبقية حدوث):
type -t foo
نصائح أخرى
عادة عندما أرغب في نقل الحجج إلى الاسم المستعار في باش ، أستخدم مزيجًا من الاسم المستعار ودالة مثل هذا ، على سبيل المثال:
function __t2d {
if [ "$1x" != 'x' ]; then
date -d "@$1"
fi
}
alias t2d='__t2d'
لاستخدام المعلمات في الاسم المستعار ، أستخدم هذه الطريقة:
alias myalias='function __myalias() { echo "Hello $*"; unset -f __myalias; }; __myalias'
إنها وظيفة مدمرة ذاتية ملفوفة في الاسم المستعار ، لذلك فهي أفضل ما في العالمين ، ولا تأخذ خطًا إضافيًا في تعريفاتك ... وهو ما أكرهه ، أوه نعم ، وإذا كنت بحاجة إلى ذلك. القيمة ، يجب عليك تخزينها قبل استدعاء unset ، ثم إرجاع القيمة باستخدام الكلمة الرئيسية "إرجاع" في هذه الوظيفة المدمرة الذاتي هناك:
alias myalias='function __myalias() { echo "Hello $*"; myresult=$?; unset -f __myalias; return $myresult; }; __myalias'
لذا..
يمكنك ، إذا كنت بحاجة إلى هذا المتغير هناك
alias mongodb='function __mongodb() { ./path/to/mongodb/$1; unset -f __mongodb; }; __mongodb'
بالطبع...
alias mongodb='./path/to/mongodb/'
في الواقع ، سيفعل الشيء نفسه دون الحاجة إلى المعلمات ، ولكن كما قلت ، إذا كنت تريد أو كنت بحاجة إليها لسبب ما (على سبيل المثال ، كنت بحاجة إلى دولارين بدلاً من دولار واحد) ، ستحتاج إلى استخدام غلاف من هذا القبيل. إذا كان أكبر من سطر واحد ، فقد تفكر في كتابة وظيفة مباشرة لأنها ستصبح أكثر من قِبل Eyesore لأنها تزداد. تعد الوظائف رائعة نظرًا لأنك تحصل على جميع الامتيازات التي تمنحها الوظائف (انظر الإكمال ، الفخاخ ، الربط ، وما إلى ذلك للأشياء الجيدة التي يمكن أن توفرها ، في MinPage Bash).
اتمنى ان يساعدك هذا للخروج :)
هذا هو الحل الذي يمكن أن يتجنب استخدام الوظيفة:
alias addone='{ num=$(cat -); echo "input: $num"; echo "result:$(($num+1))"; }<<<'
نتيجة الاختبار
addone 200
input: 200
result:201
في CSH (في مقابل سحق) يمكنك أن تفعل بالضبط ما تريد.
alias print 'lpr \!^ -Pps5'
print memo.txt
التدوين \!^
يؤدي إلى إدراج الوسيطة في الأمر في هذه المرحلة.
ال !
الشخصية مسبقة من قبل أ \
لمنع تفسيرها على أنها أمر تاريخ.
يمكنك أيضًا تمرير وسيطات متعددة:
alias print 'lpr \!* -Pps5'
print part1.ps glossary.ps figure.ps
(أمثلة مأخوذة من http://unixhelp.ed.ac.uk/shell/alias_csh2.1.html .)
لتبسيط إجابة LEED25D ، استخدم مزيجًا من الاسم المستعار والوظيفة. فمثلا:
function __GetIt {
cp ./path/to/stuff/$* .
}
alias GetIt='__GetIt'