2013-06-13 4 views
9

나는 자주를 사용하여 내 클립 보드에 기록 명령을 복사하는 자신을 찾을 :이 터미널에서 잘 작동bash 함수에서 pbcopy는 어떻게 사용합니까? 스크립팅이 가능합니까?

echo !123 | pbcopy

. !123 = cd ..를 가정하면, 그것은이 같은 같습니다

function pb() { 
    echo $1 | pbcopy 
} 

이 명령은 다음과 같이 이상적으로 호출 할 것이다 : pb !!

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

가 인생을 더 쉽게 만드는을, 나는 나의 .bashrc에이 bash는 기능을 추가 . 그러나 이것은 작동하지 않습니다. 여기에 무슨 일 없습니다 :

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

아무리 호출 무엇 역사 명령, 항상 클립 보드에 !!를 반환합니다. 나도 별명을 시도,하지만 같은 문제 공유 :

alias pb='echo !! | pbcopy'

모든 포인터를?

+0

'Ctrl-R'을 사용하여 기록에서 역 검색을 수행한다는 사실을 알고 계십니까? – devnull

+1

예. 그러나 그것은 클립 보드에 아무 것도 복사하지 않습니다 (다른 프로그램에서 사용하기 위해). –

답변

11

기능이 다소 잘못되었습니다. 대신

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

결과입니다 $1

[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 '!!' 마지막 기록 항목을 인쇄하는 데 사용할 수 있습니다 : LC_CTYPE이 C 인 경우

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

, pbcopy은 비 ASCII 문자를 깨짐. 터미널과 iTerm은 기본적으로 en_US.UTF-8과 같은 로케일 변수를 설정합니다.

관련 문제