2013-06-13 7 views
9

मैं अक्सर अपनी क्लिपबोर्ड इस का उपयोग करने के इतिहास आदेशों को कॉपी अपने आप को लगता है:मैं बैश फ़ंक्शन में पीबीसीपी का उपयोग कैसे करूं? क्या इसे लिखित किया जा सकता है?

echo !123 | pbcopy

इस टर्मिनल से ठीक काम करता है। !123 = cd .. मान लिया जाये, यह इस तरह दिखता है:

function pb() { 
    echo $1 | pbcopy 
} 

यह आदेश लागू किया जाएगा, आदर्श, इस तरह:: pb !!

$ echo !123 | pbcopy 
echo cd .. | pbcopy 
    //result: `cd ..` is in the clipboard 

जीवन को आसान बनाने के लिए, मैं अपने .bashrc को यह बैश समारोह जोड़ा । हालांकि, यह काम नहीं करता है। कोई फर्क नहीं पड़ता कि यह हमेशा क्लिपबोर्ड !! रिटर्न क्या इतिहास आदेश मैं आह्वान

$ pb !123 
pb cd .. | pbcopy 
    //result: `!!` is in the clipboard 

,: यहाँ क्या होता है। मैं एक उपनाम भी बनाने की कोशिश की, लेकिन वह एक ही समस्या साझा करता है:

alias pb='echo !! | pbcopy'

किसी भी संकेत दिए गए?

+0

क्या आप जानते हैं कि आप 'Ctrl-R' का उपयोग करके इतिहास पर एक विपरीत खोज करते हैं। – devnull

+1

हाँ मैं हूं। हालांकि यह क्लिपबोर्ड पर कुछ भी कॉपी नहीं करता है (अन्य कार्यक्रमों में उपयोग के लिए)। –

उत्तर

11

आपका कार्य कुछ हद तक गलत है। यह $1

कि है

function pb() { 
    echo "[email protected]" | pbcopy 
} 

परिणाम के बजाय [email protected] उपयोग करना चाहिए:

[email protected]:/tmp $ function pb() { echo "[email protected]" | pbcopy ; } 
[email protected]:/tmp $ pb !2030 
pb file `which bzcat` 
    //result: `file /bin/bzcat` is in the clipboard 
[email protected]:/tmp $ 

व्याख्या करने के लिए क्यों alias काम नहीं करता, !! एकल उद्धरण, और इतिहास प्रतिस्थापन के अंदर है होता है अगर !! उद्धृत नहीं किया गया है। चूंकि यह कमांड इतिहास पर प्रतिस्थापन है, जो परिभाषा से इंटरैक्टिव है, इसे चर और एलियास में सहेजना बहुत मुश्किल है।

+1

हाँ, यह काम कर रहा है! धन्यवाद, वह वास्तव में सहायक था। –

2

तुम भी fc -l -1 या history -p '!!' पिछले इतिहास प्रविष्टि मुद्रित करने के लिए इस्तेमाल कर सकते हैं:

pb() { 
    [[ $# = 0 ]] && local n=-1 || local n="$1 $1" 
    fc -l $n | cut -d' ' -f2- | printf %s "$(cat)" | LC_CTYPE=UTF-8 pbcopy 
} 

तो LC_CTYPE सी है, pbcopy अप गैर- ASCII वर्ण garbles। टर्मिनल और आईटर्म ने स्थानीय रूप से en_US.UTF-8 जैसे लोकेल वैरिएबल को डिफ़ॉल्ट रूप से सेट किया है।

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

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