답변:
내 대답은 세 가지 구문으로 간단한 명령을 제공합니다.이 구문은 모두 동일하게 작동하지만 하나는 두 번째보다 약간 짧고 입력하기 쉽습니다. 세 번째 변형은 소위 별명입니다. 즉, 명령에 사용자 정의 이름을 지정하고 복잡한 것을 기억하지 않고도 명령을 실행하여 호출 할 수 있습니다.
먼저 xsel
터미널에서 X 클립 보드에 액세스 할 수 있는 패키지 를 설치하십시오 .
sudo apt-get install xsel
그런 다음 다음 줄을 입력하여 이전 명령을 클립 보드에 복사 할 수 있습니다.
xsel -ib <<<!!:q
당신은 두 번째 최신 명령을 복사 교체하려는 경우 !!
와 !-2
세 번째 최신 사용을 위해, !-3
등등.
실행중인 내용을 설명하기 위해 다음 명령을 간단히 살펴 보겠습니다.
xsel
X 클립 보드에 액세스하는 명령 줄 도구입니다.
자세한 내용은 온라인으로 또는 온라인 에서 맨 페이지를 참조하십시오 man xsel
.
-i
매개 변수는 xsel
stdin에서 읽도록 지시 합니다 (보통 키보드 입력을 의미하지만 여기서는 뭔가를 리디렉션합니다)-b
매개 변수는 X의 "1 차"또는 "2 차"선택 대신 클립 보드를 사용하도록 지정합니다.<<<
"Here String"이라는 특수 Bash 구문입니다.
기본적으로 인수 후 (평가하지 않습니다!) 인수를 확장하고 (단지!
!!:q
bash에서 히스토리 확장을위한 "bang 명령"이라고합니다. 이전에 입력 한 명령 행으로 대체됩니다.
자세한 내용 man history
은 온라인 맨 페이지는 도움이되지 않음 을 실행하여 로컬 맨 페이지를 읽으십시오 .
!!
이전 명령 줄 의미와 동의어입니다 !-1
. !-2
두 번째 마지막 명령 줄을 의미합니다. 빼기 부호를 잊지 마십시오 -
. 그렇지 않으면 입력 한 두 번째 (3rd / ...) 명령이 반환됩니다.:q
수정 뱅 명령과 작은 따옴표로 대체를 둘러싸 bash는 알 수는 ( '
) 쉘에 의해 추가 확장을 방지합니다.echo !!:q | xsel -ib
echo
모든 인수를 터미널의 표준 출력에 인쇄하는 간단한 작업이 있습니다.
!!:q
bash에서 히스토리 확장을위한 "bang 명령"이라고합니다. 이전에 입력 한 명령 행으로 대체됩니다.
!!
이전 명령 줄 의미와 동의어입니다 !-1
. 분명히 !-2
두 번째 마지막 명령 줄을 의미합니다. 빼기 부호를 잊지 마십시오 -
. 그렇지 않으면 입력 한 두 번째 (3rd / ...) 명령이 반환됩니다.:q
수정 뱅 명령과 작은 따옴표로 대체를 둘러싸 bash는 알 수는 ( '
) 쉘에 의해 추가 확장을 방지합니다.|
파이프입니다. 명령 전에 터미널 출력 ( "stdout")을 명령 후 터미널 입력 ( "stdin")으로 리디렉션합니다.
xsel
X 클립 보드에 액세스하는 명령 줄 도구입니다.
자세한 내용은 온라인으로 또는 온라인 에서 맨 페이지를 참조하십시오 man xsel
.
-i
매개 변수는 xsel
stdin에서 읽도록 지시 합니다 (보통 키보드 입력을 의미하지만 여기서는 뭔가를 리디렉션합니다)-b
매개 변수는 X의 "1 차"또는 "2 차"선택 대신 클립 보드를 사용하도록 지정합니다.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")으로 리디렉션합니다.
xsel
X 클립 보드에 액세스하는 명령 줄 도구입니다.
자세한 내용은 온라인으로 또는 온라인 에서 맨 페이지를 참조하십시오 man xsel
.
-i
매개 변수는 xsel
stdin에서 읽도록 지시 합니다 (보통 키보드 입력을 의미하지만 여기서는 뭔가를 리디렉션합니다)-b
매개 변수는 X의 "1 차"또는 "2 차"선택 대신 클립 보드를 사용하도록 지정합니다.<<<
구조가 어떻게 다시 호출 되는지 기억하는 데 도움이 될 수 있습니까? 그리고 나는 <<<!!:q xsel -ib
더 낫다고 생각 합니다 (히스토리 뱅 명령을 인용하면 인용하지 않습니다), 그렇지 않습니까?
!!:q
작은 따옴표 ( '
)를 사용합니다 ...
<<<"!!" xsel -ib
. 예, <<<!!:q xsel -ib
더 낫습니다.
xsel
흥미로운 구문이 있습니다
당신은 사용할 수 있습니다 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
echo "command" | xclip -selection clipboard
... 또는 아래에 스크립트를 작성~/.bin
하십시오 echo "$@" | xclip -selection clipboard
. "cpy"로 저장하면 cpy youtube-dl stuff
실행 가능하지 않고 클립 보드에 복사됩니다.
echo "$@" | xclip -selection c && $@
... 또는 평가에 더 영리한 뭔가
방금 이 작업을 수행 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
있습니다.
!!
도움이 될 것 같습니다. 감사합니다!
클립 보드 관리자로 사용하고 있습니다.
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
이 아이디어가 당신이 당신의 자신의 솔루션을 만드는 데 도움이 될 것이라고 생각합니다
<<<"!!" xsel -ib