마우스없이 전체 명령 행을 클립 보드에 복사하는 방법은 무엇입니까?


20

터미널에이 줄이 있다고 상상해보십시오.

youtube-dl --get-thumbnail --extract-audio --audio-format mp3 https://www.youtube.com/watch?v=

테스트 한 후 위의 줄을 클립 보드에 복사하여 스크립트 파일에 붙여 넣습니다. 명령의 출력이 아닙니다 . 그러나 마우스를 사용하지 않고이 작업을 수행합니다. 나는 키보드에만 손을 대고 싶다. 코딩이 더 빠르다고 생각합니다. :)

답변:


22

내 대답은 세 가지 구문으로 간단한 명령을 제공합니다.이 구문은 모두 동일하게 작동하지만 하나는 두 번째보다 약간 짧고 입력하기 쉽습니다. 세 번째 변형은 소위 별명입니다. 즉, 명령에 사용자 정의 이름을 지정하고 복잡한 것을 기억하지 않고도 명령을 실행하여 호출 할 수 있습니다.

예비:

먼저 xsel터미널에서 X 클립 보드에 액세스 할 수 있는 패키지 를 설치하십시오 .

sudo apt-get install xsel

명령 변형 1 (짧음) :

그런 다음 다음 줄을 입력하여 이전 명령을 클립 보드에 복사 할 수 있습니다.

xsel -ib <<<!!:q

당신은 두 번째 최신 명령을 복사 교체하려는 경우 !!!-2세 번째 최신 사용을 위해, !-3등등.

실행중인 내용을 설명하기 위해 다음 명령을 간단히 살펴 보겠습니다.

  • xselX 클립 보드에 액세스하는 명령 줄 도구입니다.
    자세한 내용은 온라인으로맨 페이지 아이콘 또는 온라인 에서 맨 페이지를 참조하십시오 man xsel.

    • -i매개 변수는 xselstdin에서 읽도록 지시 합니다 (보통 키보드 입력을 의미하지만 여기서는 뭔가를 리디렉션합니다)
    • -b매개 변수는 X의 "1 차"또는 "2 차"선택 대신 클립 보드를 사용하도록 지정합니다.
  • <<<"Here String"이라는 특수 Bash 구문입니다.
    기본적으로 인수 후 (평가하지 않습니다!) 인수를 확장하고 (단지!

  • !!:qbash에서 히스토리 확장을위한 "bang 명령"이라고합니다. 이전에 입력 한 명령 행으로 대체됩니다.
    자세한 내용 man history은 온라인 맨 페이지는 도움이되지 않음 을 실행하여 로컬 맨 페이지를 읽으십시오 .

    • !!이전 명령 줄 의미와 동의어입니다 !-1.
      분명히 !-2두 번째 마지막 명령 줄을 의미합니다. 빼기 부호를 잊지 마십시오 -. 그렇지 않으면 입력 한 두 번째 (3rd / ...) 명령이 반환됩니다.
    • :q수정 뱅 명령과 작은 따옴표로 대체를 둘러싸 bash는 알 수는 ( ') 쉘에 의해 추가 확장을 방지합니다.

명령 변형 2 (약간 길다) :

echo !!:q | xsel -ib
  • echo 모든 인수를 터미널의 표준 출력에 인쇄하는 간단한 작업이 있습니다.

  • !!:qbash에서 히스토리 확장을위한 "bang 명령"이라고합니다. 이전에 입력 한 명령 행으로 대체됩니다.

    • !!이전 명령 줄 의미와 동의어입니다 !-1. 분명히 !-2두 번째 마지막 명령 줄을 의미합니다. 빼기 부호를 잊지 마십시오 -. 그렇지 않으면 입력 한 두 번째 (3rd / ...) 명령이 반환됩니다.
    • :q수정 뱅 명령과 작은 따옴표로 대체를 둘러싸 bash는 알 수는 ( ') 쉘에 의해 추가 확장을 방지합니다.
  • |파이프입니다. 명령 전에 터미널 출력 ( "stdout")을 명령 후 터미널 입력 ( "stdin")으로 리디렉션합니다.

  • xselX 클립 보드에 액세스하는 명령 줄 도구입니다.
    자세한 내용은 온라인으로맨 페이지 아이콘 또는 온라인 에서 맨 페이지를 참조하십시오 man xsel.

    • -i매개 변수는 xselstdin에서 읽도록 지시 합니다 (보통 키보드 입력을 의미하지만 여기서는 뭔가를 리디렉션합니다)
    • -b매개 변수는 X의 "1 차"또는 "2 차"선택 대신 클립 보드를 사용하도록 지정합니다.

명령 변형 3 (별칭) :

bash 별명은 자주 사용하는 길거나 복잡한 명령을 기억하고 싶지 않은 경우 멋진 것입니다. 이 명령을 간단한 별명 이름에 지정할 수 있습니다.이 명령은 긴 명령 대신 실행하여 동일한 이름을 달성 할 수 있습니다.

불행하게도 bang 명령은 특별한 Bash 기능이며 별칭이 해결되기 전에 확장되므로 !!파트가 작동하지 않기 때문에 위 변형 중 하나를 별칭으로 지정할 수 는 없습니다. 그래도 해결 방법이 있습니다.

별명을 설정하려면 터미널에서 다음 줄을 실행하십시오. 다음 대신 유효한 Bash 변수 이름을 선택할 수 있습니다 copylastcommand.

alias copylastcommand='history -p \!\! | xsel -ib'

그러나 이것은 현재 Bash 세션에 대해서만 지속되므로 터미널 창을 닫으면 별칭이 사라집니다. 이 줄을 ~/.bashrc파일 끝에 또는 ~/.bash_aliases파일이있는 경우 파일 에 추가하여 모든 Bash 세션에서 지속성을 유지할 수 있습니다 .

다시 한 번 말하지만, 짧은 줄 :

  • alias name='command'Bash에서 별칭을 설정하는 구문입니다. 은 command당신이 실행할 때마다 실행됩니다 name지금부터.

  • history -p \!\!이전에 실행 된 명령 행을 stdout (표준 출력)으로 출력합니다. -p스위치가 없으면 인쇄뿐만 아니라 명령을 다시 실행합니다. 백 슬래시 ( )로
    앞머리 ( !) 를 이스케이프해야합니다. \그렇지 않으면 bash가 별칭을 설정하려고 할 때 bash가 확장하므로 별칭에있는 그대로 있어야합니다.
    다시, 두 번째 뱅을로 대체하여 [n] 번째 최근 명령을 지정할 수도 있습니다 ( -n예 :) \!-2.

  • |파이프입니다. 명령 전에 표준 출력 ( "stdout")을 명령의 터미널 표준 ( "stdin")으로 리디렉션합니다.

  • xselX 클립 보드에 액세스하는 명령 줄 도구입니다.
    자세한 내용은 온라인으로맨 페이지 아이콘 또는 온라인 에서 맨 페이지를 참조하십시오 man xsel.

    • -i매개 변수는 xselstdin에서 읽도록 지시 합니다 (보통 키보드 입력을 의미하지만 여기서는 뭔가를 리디렉션합니다)
    • -b매개 변수는 X의 "1 차"또는 "2 차"선택 대신 클립 보드를 사용하도록 지정합니다.

1
좋은 대답이지만 파이프를 피할 수 있습니까? 제발 제발? <<<"!!" xsel -ib
kos

@ kos 네, 감사합니다. 그것은 조금 더 쉬워집니다. <<<구조가 어떻게 다시 호출 되는지 기억하는 데 도움이 될 수 있습니까? 그리고 나는 <<<!!:q xsel -ib더 낫다고 생각 합니다 (히스토리 뱅 명령을 인용하면 인용하지 않습니다), 그렇지 않습니까?
바이트 사령관

그러나 !!:q작은 따옴표 ( ')를 사용합니다 ...
바이트 사령관

맞습니다. 확장은을 사용하여 수행됩니다 <<<"!!" xsel -ib. 예, <<<!!:q xsel -ib더 낫습니다.
kos

니스, xsel흥미로운 구문이 있습니다
Sergiy Kolodyazhnyy

5

당신은 사용할 수 있습니다 xclip:

some_command | xclip -selection c

그래서 당신의 경우 :

youtube-dl .... | xclip -selection c

c 클립 보드를 나타냅니다.

xclip먼저 설치해야 할 수도 있습니다 .

sudo apt-get install xclip

편집하다:

입력 한 명령 (출력 아님) 만 클립 보드에 복사하려면 Here strings를 사용할 수 있습니다.

 xclip -selection c <<<"$(echo foobar)"

또는 파이프 :

echo foobar | xclip -selection c

1
여전히 명령 출력이 표시되지만 줄 자체 만 원합니다.
발터 실바

echo "command" | xclip -selection clipboard... 또는 아래에 스크립트를 작성~/.bin 하십시오 echo "$@" | xclip -selection clipboard. "cpy"로 저장하면 cpy youtube-dl stuff실행 가능하지 않고 클립 보드에 복사됩니다.
Alex

당신이 원한다면 그리고 실행 ... 수 echo "$@" | xclip -selection c && $@... 또는 평가에 더 영리한 뭔가
알렉스

@ValterHenrique 내 편집 내용을 확인하십시오 ..
heemayl

3

방금 이 작업을 수행 zsh하는 데 사용 되는 작은 스크립트를 만들었습니다 xclip.

#!/bin/zsh
export HISTFILE=~/.zsh_history
fc -R
fc -l | tail -n 2 | sed -n '1p' | sed 's/[0-9]*  //' | xclip -selection c

이 스크립트는 쉘 / 터미널에 입력 된 마지막 명령을 시스템의 클립 보드에 복사합니다. 일반적인 원격 서버에서는 작동하지 않습니다.

이 스크립트를 작성하는 데 몇 분이 걸릴 것이라고 생각했지만, zsh역사를 다루는 방식을 우연히 발견했을 때 놀랍게도 오래 걸렸습니다 .

tail -n 2먼저 sed이에이 스크립트 자체에 대한 명령이 역사와 그 역사의 두 줄을 얻고 마지막을 제거 있도록 기록되고 있다는 사실을 다루고있다.

이 스크립트는 효과가 있으며 재미있는 퍼즐이지만, 간단하고 우아한 방법으로 궁금한 점이 zsh있습니다.


아마도 tailand sed명령을 하나 또는 두 개의 명령으로 단순화 할 수 있습니다. 여기!! 에 설명 된 명령 사용 -ZSH에서 사용 가능해야합니다 ...
Wilf

정말 !!도움이 될 것 같습니다. 감사합니다!
alec

0

클립 보드 관리자로 사용하고 있습니다.

alias pbpaste='xclip -i -selection clipboard -o'
alias pbcopy='xclip -selection clipboard'
vimscratch='vim -c 'setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile' 

클립 보드에 마지막 명령

alias last2cb='fc -ln -1 | pbcopy'

Vim 스크래치에 클립 보드

alias vcb='pbpaste | vimscratch -'

ZSH 특정

# Copy the most recent command to the clipboard
function _pbcopy_last_command(){
    fc -ln -1 | pbcopy
}
zle -N pbcopy-last-command _pbcopy_last_command
bindkey '^x^y' pbcopy-last-command
# Ctrl-x Ctrl-y  to copy last command to the clipboard


# Edit content of clipboard on vim (scratch buffer)
function _edit_clipboard(){
    pbpaste | vim -c 'setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile' -
}
zle -N edit-clipboard _edit_clipboard
bindkey '^x^v' edit-clipboard
# Ctrl-x Ctrl-v to edit clipboard on vim


# define function that retrieves and runs last command
function run-again {
    # get previous history item
    zle up-history
    # confirm command
    zle accept-line
}
# define run-again widget from function of the same name
zle -N run-again
bindkey '\er' run-again
# alt-r to run last command again

이 아이디어가 당신이 당신의 자신의 솔루션을 만드는 데 도움이 될 것이라고 생각합니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.