سؤال كيف يمكنني البحث في محفوظات bash ثم أعد تشغيل أمر؟


هل يمكنني البحث في التاريخ باش وتشغيل النتيجة؟


277
2017-07-17 19:23


الأصل




الأجوبة:


نوع السيطرة  R في سطر الأوامر وبدء كتابة الأمر السابق. بمجرد ظهور النتيجة ، استمر في الضرب السيطرة  R لمشاهدة مباريات أخرى. عندما يظهر الأمر الذي تريده ، اضغط ببساطة أدخل

لاحظ أنه في حين السيطرة  R هو الافتراضي ، إذا كنت تريد الأمر (reverse-search-history) يكون مرتبطا ب السيطرة  تي يمكنك تكوين ذلك بما يلي:

ربط "" \ C-t ": سجل البحث العكسي"

هناك مجموعة كاملة من الأوامر القابلة للقراءة الأخرى المتاحة لك. إلقاء نظرة على bash صفحة رجل.

لدى Bash العديد من المرافق للبحث عن سجل الأوامر التفاعلي والوصول إليه. أبسط منها هو history مدمج. الكتابة فقط:

تاريخ $

سيتم طباعة قائمة بالأوامر مع فهرس رقمي ، مثل:

تاريخ $
1 واضح
2 ls -al
3 vim ~ / somefile.txt
4 التاريخ
$

يمكنك بعد ذلك تنفيذ أي من هذه الأوامر باستخدام فهرسها الرقمي من خلال تهيئة الفهرس باستخدام فهرس !، مثل ميتش أشار:

1 دولار

سوف تنفذ clear أمر. تاريخ مدمج لديه العديد من الميزات نفسها ، يمكنك أن ترى المزيد في bash و history صفحات رجل.

يمكنك أيضًا تحديد إزاحات سلبية نسبية عند استخدام ! ، لذلك استخدم قائمة تاريخنا السابقة ، إذا أردنا التنفيذ vim مرة أخرى ، يمكننا القيام به:

$! -2

وهو يقول بشكل أساسي عن bash لتنفيذ الأمر الذي قمت بتشغيله "قبل أمرين". لتشغيل الأمر السابق في قائمة المحفوظات ، يمكننا فقط استخدام !! (وهو اختصار فقط ل !-1).

ال ! لا يحددك المرسوم لتحديد أي أمر يتم تشغيله. hayalci أظهر أنه يمكنك توجيه bash لتنفيذ أمر يعتمد على النص الذي يبدأ به (باستخدام !) أو النص داخل الأمر نفسه (باستخدام !?). مرة أخرى ، باستخدام قائمة تاريخ المثال لدينا أعلاه ، إذا أردنا تنفيذه clear مرة أخرى ، كل ما يتعين علينا فعله هو:

$!

و اضغط أدخل. وماذا عن vim؟ هذا بسيط مثل:

بعض!

أهم نقطة من hayalciرد هو الدعوة إلى shopt مدمج:

$ shopt -s histverify

سيؤدي هذا إلى تمكين التحقق من السجل حتى تتوافق مع الأوامر التي يطابقها !، !!و !? لا يتم تنفيذ المفسرين بشكل أعمى ، ولكن بدلاً من ذلك يتم تعبئتها على سطر الأوامر حتى تتمكن من التأكد من أنهم لن يفعلوا أي شر قبل تنفيذها. هذا الأمر أكثر أهمية عندما تقوم بتنفيذ الأوامر كمستخدم أساسي. يمكن ضبط هذا الخيار في .bashrc ملف بدء التشغيل بحيث يتم ضبطه كلما قمت بتسجيل الدخول.

كما سبق أن أشرنا إلى ذلك ، يمكن استخلاص كل هذه المعلومات من bash صفحة رجل. لـ! ، !! ، و؟ والمصممين ، ألق نظرة على القسم 9.3 تاريخ التوسع.


399
2017-07-17 19:25



+1 لقد تم استخدام لينكس لأكثر من 12 عاما لجميع النظم. لم أكن أعلم بوجودها. أتمنى أن أتمكن من +10 كيف اشتقت اليها؟ - Aiden Bell
لم أكن أكتشف ذلك حتى بدأت في استخدام emacs بانتظام. ثم كتبت بطريق الخطأ في باش يوم واحد (أفكر أنني كنت في emacs). - Sean Bright
في العديد من الأنظمة ، يؤدي الضغط على السهم لأعلى إلى نفس الشيء. - mas
سهم لأعلى بالنسبة لي فقط يذهب إلى الأمر السابق. ولكن نعم ، كل شيء قابل للربط بكل ما تريد. - Sean Bright
أيضاً بعد ضغط CTRL + R يمكنك استخدام CTRL + SHIFT + R عدة مرات للانتقال إلى الأمر السابق - Gal Bracha


كبديل ل CRTL + R، يمكنك البحث في التاريخ عن طريق الكتابة

!text

سيقوم هذا بالبحث في السجل عن أحدث أمر البداية مع "النص".

ولكن أقترح عليك وضع هذا في .bashrc الخاص بك لمنع تنفيذ الأمر الخاطئ.

shopt -s histverify

هذا يرشد باش هذا بعد أي إجراءات التاريخ (مثل !!:s/prev_text/after_text) ، فإنه يضع الخط الناتج لموجه الأوامر. ثم يمكنك مراجعة الأمر أو تحريره ، ثم اضغط على Enter بعد ذلك.


35
2017-07-17 20:40



استخدم! النص لإعادة تنفيذ أحدث الأوامر التي تحتوي على ("في مقابل البداية") ". - mark4o
إذا كان أحدهم يوطد "!" ، "!" ، "!؟" ، "التاريخ" grep '، و' ctrl-r 'في إجابة شاملة ، سأختارها. - Richard Hoskins


يمكنك أيضًا القيام بما يلي:

history | grep "stuff"

سيعود بشيء مثل

num stuff

ثم يمكنك الكتابة

!num

28
2017-07-17 20:21





أفضل استخدام سجل البحث-الخلف-عبر سجل البحث العكسي. السابق يتيح لك كتابة بعض الأحرف من الأمر ثم اضغط على مفتاح البحث ، بدلاً من ضرب مفتاح البحث أولاً ثم كتابة سلسلة البحث.

افتراضيًا على نظامي ، يرتبط M-p و M-n بوظائف مشابهة ولكنني أفضل ربط مفاتيح الأسهم:

bind '"\e[A":history-search-backward'
bind '"\e[B":history-search-forward'

14
2018-02-02 20:32





كتابة ممتازة ، شون! لقد وضعت هذا في تعليق ، ولكن أنا بضع نقاط سمعة خجولة. :-)

تقنية أخرى ذات صلة ومفيدة هي القدرة على تشغيل أمر سابق أثناء تغيير كلمة. لنفترض أنك كتبت اسم الدليل أو تريد تغيير اسم الملف:

$ صدى اسمي بوب
اسمي بوب
$ ^ bob ^ jordan
صدى اسمي الأردن
اسمي جوردان

لاحظ أن الأمر قد تم توسيعه واستبداله وإخراجه قبل تشغيل الأمر ، لذلك إذا تم تشغيل الأمر غير الصحيح ، يمكنك أن ترى ما تعتقد أنه كان يفعله باش.


12
2017-09-10 14:23





لدي اسم مستعار رائع حقاً ، ح. انها حقا مجرد "تاريخ | grep" ، لكنني تصفية الإدخالات "h القيادة" السابقة مع "grep -Evv"

alias h="history | grep -E -v '^ *[0-9]+ *h ' | grep "

تستخدم مثل

h aliases
2003  less .bash_aliases

12
2017-09-25 16:45



ويمكن تحقيق ذلك أيضًا عن طريق إضافة الأمر إلى HISTIGNORE. - tanenbring


نظرًا لأن التنقل عبر التاريخ باستخدام Ctrl-r أمر مرهق ، فيمكنك التفكير في ذلك ح ح:

https://github.com/dvorka/hstr

مما يجعل التنقل أكثر بساطة وضوحا وكفاءة - بما في ذلك تشغيل الأمر:

enter image description here


5
2017-12-18 16:37



كيفية استخدامها؟ ما هي مفاتيح الضغط لمشاهدة هذه الصورة؟ - Nakilon
بمجرد تثبيت hh يمكنك إما استخدام الأمر hh أو ربطه بأي اختصار لوحة المفاتيح (عادةً Ctrl-r) كما هو موضح في الوثائق. - Martin Dvorak
يربط ل ctrl + r افتراضيا الآن - Alleo


في موجه الأوامر bash ، اكتب control-R ، ثم اكتب بضعة أحرف من الأمر الذي تريده وستقوم أداة readline لـ bash بالبحث خلال سجل الأوامر لهذا الأمر.

بعد أن تبدأ البحث ، يمكنك كتابة control-R مرة أخرى للانتقال إلى الأمر التالي المطابق.


3
2017-09-04 04:55





إذا كان لديك shell الخاص بك تكوين لاستخدام vi الارتباطات الرئيسية (set -o vi أو وجود set editing-mode vi في $HOME/.inputrc) ، ثم البحث مع <Esc>/some-command<Return> وضرب n (التالي) أو Shift-n (سابقًا) للتنقل عبر سجل سطر الأوامر.


3
2017-11-22 15:21



هذا هو الأقرب إلى مستخدمي vim. - Gabor Marton


CTRL+R يعمل على ما يرام ، مثل @ اقترح John1024 ، ولكن إلى حد ما مملة إذا كان العديد من الأوامر الأخيرة الخاصة بك متشابهة وتريد طريقة سريعة لمسحها كلها. بديل سيكون للاستخدام history:

$ history | grep keyword

2
2017-09-04 05:11