سؤال كيف حليف ناقص؟


لم تصل قهوتي الصباحية إلى دماغي بعد عندما نسيت الاقتباسات في:

alias grep="grep --color=always"

لذلك بدلا من ذلك كتبت:

alias grep=grep --color=always

تركتني مع:

--color=always
grep=grep

في الأسماء المستعارة.

عندما أحاول تنظيف --color = دائما باستخدام unalias --color انا حصلت:

bash: unalias: --: invalid option
unalias: usage: unalias [-a] name [name ...]

حاولت الهروب ، نقلا عن التسول ، ولكن لا أستطيع معرفة كيفية جعل المغفل الأماليس تنظيف الفوضى.

(أنا أعلم أن إعادة تشغيل سوف تفعل خدعة ولكن بالتأكيد يجب أن يكون هناك طريقة أخرى)


83
2018-03-02 10:01


الأصل


ها ها ها ، الآن حصلت عليه عالقة في الأعمال المتعلقة بالألغام أيضا ، والعمل على ذلك تحرير: يبدو وكأنه يعمل جواب choroba لي - asmith
نوع من يذكرني القديم echo > \\?\c:\windows\x.أو ذلك الوقت rm -rf * ~ بالصدفة. - Jason C


الأجوبة:


يمكنك تجنب أنظمة POSIX المتوافقة التي تفسر الشرطات في الأوامر عن طريق الإضافة -- قبل أي حجج.

mtak@frisbee:~$ alias grep=grep --color=always
mtak@frisbee:~$ alias | grep color
alias --color='always'

mtak@frisbee:~$ unalias -- --color
mtak@frisbee:~$ alias | grep color
mtak@frisbee:~$

يعمل هذا أيضًا مع أدوات مساعدة أخرى ، لنفترض أن لديك ملفًا مسمىًا -bla. إذا حاولت إزالته rm سوف تحصل على الخطأ التالي:

mtak@frisbee:~$ ls -- -bla
-bla
mtak@frisbee:~$ rm -bla
rm: invalid option -- 'b'
Try 'rm ./-bla' to remove the file '-bla'.
Try 'rm --help' for more information.

باستخدام -- قبل اسم الملف ، ستقوم بإزالة الملف:

mtak@frisbee:~$ rm -- -bla
mtak@frisbee:~$ ls -- -bla
ls: cannot access '-bla': No such file or directory

128
2018-03-02 10:07



على الرغم من أنه من الجدير بالملاحظة أنه بالنسبة للملفات ، فإن الطريقة الصحيحة على قدم المساواة هي استخدام مسار إلى الملف الذي يتجنب ذلك ؛ بحيث يمكنك استخدامها ls ./-bla و rm ./-bla (أو تحديد المسارات الكاملة ، أيهما أسهل في حالتك). من الواضح أن هذا لا يعمل على الأسماء المستعارة رغم ذلك! - Muzer
pubs.opengroup.org/onlinepubs/009695399/basedefs/... المبدأ التوجيهي 10 - DarkHeart


ما عليك سوى استخدام الخدعة نفسها التي استخدمتها في تعيين الاسم المستعار

unalias whatever --color

94
2018-03-02 10:03



يعمل بالفعل ، +1 ولكن الحل الآخر هو أنظف قليلا :) - Requist
في الواقع ، بالطبع :-) - choroba
unalias unalias --color - Cœur


حل سريع

لإصلاح على حد سواء الأسماء المستعارة الخطأ قد تعمل ببساطة

unalias grep --color


فهم ما حدث

أنت تعطي الأمر الخاطئ alias grep=grep --color=always بدون "...".

  • قمت بتعيين اثنين من الأسماء المستعارة  --color و grep. في الواقع يمكنك قراءتها على الجانب الأيسر من الإخراج الخاص بك (كلها على يسار = هو أمر مستعار):

    --color=always
    grep=grep
    

    لذلك تحتاج إلى تعيين كلاهما.

  • لماذا حدث هذا؟
    ال ... في synoptic من الاسم المستعار يعني أنه من الممكن القيام بمهام متعددة في سطر واحد:

    الاسم المستعار: الاسم المستعار [-p] [name [= value] ...]

    في إخراج help alias يمكنك أن تقرأ السينوبتيكية ولكن من man bash يمكنك قراءة هذا ممكن في نفس السطر حتى في القائمة والتعيين في نفس الوقت:

    عندما يتم توفير الحجج ، يتم تعريف الاسم المستعار لكل اسم يتم إعطاء قيمته.  تؤدي المساحة الزائدة في القيمة إلى التحقق من الكلمة التالية لاستبدال الاسم المستعار عند توسيع الاسم المستعار. لكل اسم في قائمة الوسيطة التي لا يتم تقديم أي قيمة لها ، تتم طباعة اسم وقيمة الاسم المستعار ... 

  • لديك مشاكل في إلغاء تعيين أول واحد --color وحده.
    هذا بسبب يتم تفسيرها كخيارات إلى عن على alias من صدفة الخاص بك. لتجنب هذا تحتاج إلى التواصل الخاص بك bash قذيفة أن ما يتبع ذلك ليس خيارًا.

  • ال الكأس المقدسة لينكس: man، في هذه الحالة man bash هذا هو الوعاء مليئة بالكنوز مفيدة في مثل هذا الوضع.
    يمكنك أن تقرأ من man bash:

    - A - يشير إلى نهاية الخيارات ويعطل كذلك   معالجة الخيار. أي الحجج بعد - تعامل على أنها أسماء الملفات   والحجج. حجة من - تعادل -.

    كما ورد في إجابة أخرى ، فإن طريقة POSIX هي استخدام تركيبة الأحرف الخاصة --.

    unalias -- --color
    
  • لكن لماذا ا unalias grep --color يعمل؟ أعني بدون استخدام --؟
    كما عملت ل alias حتى ل unalias من الممكن إعطاء أكثر من اسم واحد في نفس الوقت (مرة أخرى [...]).

    unalias: unalias [-a] name [name ...]
    

    يمكنني إعطاء تخميني فقط: عادة جيدة في البرمجة هي كتابة إجراءات القراءة والكتابة في نفس الوقت ، دون نفس المنطق. لذلك يجب أن يكون للخيار تحليل روتين alias و unalias.

    أن هذا يعمل يمكنك أن ترى حتى من هذا الأمر (من قذيفة فتح لهذا الغرض) والتي لن تمحو جميع الأسماء المستعارة الخاصة بك:

    unalias whatever -a
    

الملاحظة النهائية

في القسم BUGS من man bash بين الأشياء القليلة التي ذكرت أنك قد تقرأ :-)

الأسماء المستعارة مربكة في بعض الاستخدامات.


3
2018-03-06 10:55