2010-09-17 4 views
5

कभी-कभी मुझे उत्तराधिकार में कई बार एक आदेश चलाने पड़ते हैं, उदाहरण के लिए यह देखने के लिए कि कोई सेवा शुरू हो गई है, और यह ऊपर की तीर और एंटर कुंजी को बार-बार दबाकर मेरे हाथों को सामान्य टाइपिंग स्थिति से दूर ले जाने के लिए कठिन हो जाता है। ऊपर तीर और एंटर कुंजी के बिना पिछले कमांड को चलाने का कोई तरीका है, शायद एक विस्तृत खोल स्क्रिप्ट के साथ?ऊपर तीर के लिए वैकल्पिक + पिछली कमांड चलाने के लिए एंटर करें?

मैंने निम्नलिखित की कोशिश की है, लेकिन यह असंतोषजनक है क्योंकि यह उपनाम निष्पादित नहीं कर सकता है, और यह थोड़ा धीमा है।

history | tail -2 | head -1 | cut -d' ' -f4- | cat > prev_command.txt 
sleep .01 
chmod 777 prev_command.txt 
eval prev_command.txt 
rm prev_command.txt 

आदर्श रूप में मैं इस स्क्रिप्ट के लिए एक उपनाम तो मैं "पिछला" कमांड लाइन में की तरह कुछ में टाइप और पिछले आदेश को फिर से चलाने के लिए Enter दबा सकते हैं होगा।

+0

तो "पिछला" टाइप करना ऊपर से + तेज है? – halfdan

+3

superuser.com – stepancheg

उत्तर

3

बैश में:

 
$ help fc 
fc: fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command] 
    Display or execute commands from the history list. 

    fc is used to list or edit and re-execute commands from the history list. 
    FIRST and LAST can be numbers specifying the range, or FIRST can be a 
    string, which means the most recent command beginning with that 
    string. 

    Options: 
     -e ENAME select which editor to use. Default is FCEDIT, then EDITOR, 
      then vi 
     -l list lines instead of editing 
     -n omit line numbers when listing 
     -r reverse the order of the lines (newest listed first) 

    With the `fc -s [pat=rep ...] [command]' format, COMMAND is 
    re-executed after the substitution OLD=NEW is performed. 

    A useful alias to use with this is r='fc -s', so that typing `r cc' 
    runs the last command beginning with `cc' and typing `r' re-executes 
    the last command. 

    Exit Status: 
    Returns success or status of executed command; non-zero if an error occurs. 

नोट उर्फ ​​आर के लिए सुझाव; मैं अक्सर इसका इस्तेमाल करता हूं।

15

बैश में, आप पिछला आदेश पर जाने के लिए ctrlपी दबा सकते हैं - कि एक बहुत तीर कुंजी को स्थानांतरित करने के लिए की तुलना में बेहतर है।

+0

पर ले जाया जाना चाहिए यह 'tcsh' में भी काम करता है। –

+0

"आर" का उपयोग करके ksh और zsh में भी काम करता है। –

+4

और अगले कमांड पर वापस चक्र के लिए 'ctrl + n'', यदि आप बहुत दूर जाते हैं। – davidjb

1

आप जिस टर्मिनल का उपयोग कर रहे हैं उसके आधार पर, मुझे पता है कि एफ 3 को दोहराने के विकल्प के रूप में बहुत उपयोग किया जाता है, लेकिन यह तब तक टाइपिंग के लिए सामान्य सीमा के बाहर है जब तक कि आपके पास अधिक सुलभ फ़ंक्शन कुंजियों वाला विशेष कीबोर्ड न हो।

मेरा कीबोर्ड फ़ंक्शन कुंजियों को आसानी से सुलभ बनाता है, लेकिन मैं यूनिक्स में अधिक कमांड लाइन काम नहीं करता हूं, इसलिए मैं आपको यह सुनिश्चित करने में सक्षम नहीं हूं कि यह अभी भी संभव है या नहीं।

7

उपयोग

!!

अपने पिछले आदेश को चलाने के लिए।

sudo !! 

रिकॉर्ड के लिए भी काम करता है।

+0

क्या कोई रास्ता है !! या ctrl पी नीचे उपनाम में उपनाम में? मैंने alias l = '!!' की कोशिश की है, लेकिन यह मुझे "bash: !!: कमांड नहीं मिला" त्रुटि देता है जब मैं इसे चलाता हूं। – Thomas

4

उत्तराधिकार में कई बार एक ही कमांड चलाने के बजाए, watch क्यों नहीं? watch बार-बार निर्दिष्ट आदेश चलाएगा और आउटपुट को stdout में प्रदर्शित करेगा ताकि आप इसे समय के साथ बदल सकें।

watchcommand

2

आप एक Emacs या उपयोगकर्ता vi हैं? आप

set -o vi 
set -o emacs 

emacs या vi keybindings सेट करने के लिए उपयोग कर सकते हैं। फिर आप बाश में emacs या vi कुंजी बाइंडिंग का उपयोग कर सकते हैं। मुझे नहीं पता कि यह अन्य गोले के लिए काम करना चाहिए या नहीं। मेरा मानना ​​है कि वीआई मोड डालने मोड में शुरू होता है, इसलिए आपको कमांड मोड दर्ज करने के लिए एएससी हिट करने की आवश्यकता है। Emacs मोड (डिफ़ॉल्ट) में, आप ctrl + p और फिर ctrl + j का उपयोग पिछली पंक्ति में जाने और कैरिज रिटर्न करने के लिए कर सकते हैं।

अन्यथा, आप इसका उपयोग कर सकते हैं !! जैसा कि किसी और ने सुझाव दिया था। पिछले करीबी मिलान के लिए अपने इतिहास के माध्यम से यह सहभागी खोज -

संबंधित मुद्दे