터미널-마우스를 사용하지 않고 CLI에서 복사


20

CLI에서 명령을 실행하는 동안 방금 시작한 명령 이나 터미널에 작성한 것을 복사 하여 마우스를 사용하지 않고 다른 곳에 붙여 넣기를 원합니다 .

다음 그림과 같이 마우스를 사용하지 않고 업데이트 명령을 완전히 또는 부분적으로 복사하여 붙여 넣기를 원합니다.

마우스를 사용하지 않고 CLI에서 복사


1
마우스없이 그놈을 사용하고 있습니까?
ott--

답변:


11

당신이 사용할 수있는 screen(1) 선택의 터미널 에뮬레이터 내에서 ( xterm, gnome-terminal, ...).

필요한 기능은에 내장되어 screen있습니다. 작동 방식에 익숙해 져야합니다.

  • 기본적으로 "command"키 바인딩은 Ctrl+ A이며 "command"시퀀스와 특정 조치를 실행하여 명령을 구성합니다.
  • "복사"명령은 다음과 같습니다. AltGr+[
  • "붙여 넣기"명령은 AltGr+]

명령을 "복사"하고 다른 터미널에 "붙여 넣기"할 수 있습니다.

screen 재미 있고 일단 사용을 시작하면 전혀 사용하지 않았을 가능성이있을 것입니다.


screen명령 이 없으므로 그놈 터미널에 명령을 설치하고 터미널에서 시작 screen했습니다. 그러나 그 이후에는 시작할 수 없었습니다. 또한 내장 화면의 의미를 이해하지 못했습니다.
prayagupd

1
읽어보십시오 man screen. 또한, 나는 '내장 썼다 에서 복사가 / 기능에 존재 붙여 의미 스크린' screen 디자인으로 .
dawud

space원하는 영역을 선택 하려면 키 를 사용해야 합니다. Y전체 라인 또는 원하는 영역을 복사하는 데 사용해야 합니다. 화면은 vi움직임에 친숙합니다.
FelikZ

AltGr열쇠 는 무엇 입니까? 나는Alt
alhelal

1
screen도구는 작동하지 않습니다. 그리고 그것은 질문에 대한 답을 제공하지 않는 것 같습니다.
Luís de Sousa

7

이미 제공된 답변 외에도보다 유연한 터미널 에뮬레이터로 이동할 수 있습니다.

터미널을 rxvt-unicode 로 변경할 준비가 되었다면 urxvt-perls 와 같은 도구를 사용할 수 있습니다 : 터미널 에뮬레이터에서 다음 키보드 기능을 제공하는 스크립트 모음 :

  • 텍스트 선택, 복사 및 붙여 넣기
  • 정방향 및 역방향 검색
  • 선호하는 브라우저에서 URL을 강조 표시하고 엽니 다

패키지를 설치 한 다음에 몇 줄을 추가 ~/.Xresources하면 설치류의 플러그를 뽑을 수 있습니다.


4

다음과 같은 프로그램을 사용하여이 작업을 수행 할 수 있습니다 xclip.

NAME
   xclip - command line interface to X selections (clip‐
   board)

설치 한 후에는이를 사용하여 X 클립 보드에 연결할 수 있습니다. 불행히도, 이것은 mysql환경 에서 작동하지 않지만 (복사 된 행에 대한 자체 버퍼가 있음) '정상'명령을 실행하려는 경우 작동합니다. 예를 들면 다음과 같습니다.

$ This is a long command line

입력 CtrlA라인의 시작 부분으로 이동 한 후 에코 따옴표로 명령을 둘러싸 :

$ echo -e "This is a long command line" |xclip 

이제 가운데 클릭 클립 보드에 "이것은 긴 명령 줄입니다".

마우스를 사용하지 않고 붙여 넣으려면 붙여 넣는 위치에 따라 다릅니다. 다음을 실행하여 다른 터미널에 붙여 넣을 수 있습니다.

$ xclip -o

로 명령을 종료 (잘라 내기) CtrlK한 다음 붙여 넣기 만하면 동일한 터미널에 붙여 넣을 수 있습니다 CtrlY.

bash의 히스토리를 사용하여 터미널에서 명령을 저장할 수도 있습니다. 이 줄을 다음에 추가하십시오 ~/.bashrc.

PROMPT_COMMAND='history -a; history -r'

PROMPT_COMMAND특수 배쉬 변수입니다. 설정된 경우 값은 새 프롬프트를 발행하기 전에 명령으로 실행됩니다. history -a현재 세션의 기록을 기록 파일에 기록하고 history -r해당 파일을 다시로드합니다. 즉, 실행하는 모든 명령이 즉시 기록 파일에 기록됩니다.

이제 긴 명령 행을 실행할 때 다른 터미널로 전환하고 return 키를 누르면 (단순히 실행 $PROMT_COMMAND하거나 새 터미널 창을 열 수 있음)이 터미널의 히스토리에 액세스 할 수 있습니다. 적중 Up하면 새 터미널에서 실행할 수 있습니다.


괜찮습니다. 그래도 마우스를 사용해야합니까?
prayagupd

@PrayagUpd 아, 네, 중간 클릭 버퍼에 복사됩니다. 다른 방법은 업데이트 된 답변을 참조하십시오.
terdon

나는 $ xclip -o내가 원하는 것을 인쇄하기 때문에 내가 원하는 것이 아니라고 생각 합니다 xclipe. 그러나 +1에 대한 Ctrl+A다음 Ctrl+KCtrl+Y같은 단말기에 최소한으로 잘라내어 붙여 넣는.
prayagupd

@PrayagUpd 문제는 다양한 클립 보드 버퍼가 있으며 솔루션은 정확히 무엇을하고 싶은지에 달려 있습니다. 필요한 것의 구체적인 예를 들어 질문을 업데이트 할 수 있습니까? 어디에서 (mysql은 까다로울 것입니다) 그리고 어디로 복사하는 것을 의미합니다.
terdon

1
@PrayagUpd는 또 다른 트릭에 대한 업데이트 된 답변을 참조하십시오.
terdon

1

@evilsoup은 좋은 해결책을 제안했지만 자주 중단됩니다.

빠른 솔루션

끊임 없는 해결책 은 다음과 같습니다 .

history | tail -2 | head -1 | xclip -selection clipboard

이 명령을 실행하면 방금 실행 한 명령이 클립 보드에 복사됩니다.

기본적으로 명령 내역을 인쇄하고 두 번째 마지막 명령을 가져와 클립 보드에 공급합니다 (마지막 명령은 이것 자체이므로 두 번째 마지막 명령을 선택합니다).

맞춤형 기능

빠른 솔루션을 개발할 때, 내가 작성한 작은 기능은 꽤 똑똑하고 마지막으로 사용한 명령을 복사합니다. 마지막 인수를 복사하기 위해 숫자 인수를 제공 할 수도 있습니다. 예를 들어 두 번째 마지막 명령을 복사하기 위해 2인수로 제공

myclipcopy () {

  if [ -z $1 ]
    then  # if no argument was provided then just copy the last used command
    history | tail -2 | head -1 | sed -re 's/[[:space:]]+[[:digit:]]+[[:space:]]+//g' | xclip -selection clipboard
    echo 'Anyways, the following command has been copied:'
    history | tail -2 | head -1| sed -re 's/[[:space:]]+[[:digit:]]+[[:space:]]+//g'

  else
    myindex=$(( $1+1 ))
    history | tail -$myindex | head -1 | sed -re 's/[[:space:]]+[[:digit:]]+[[:space:]]+//g' | xclip -selection clipboard
    echo "The following command has been copied:"
    history | tail -$myindex | head -1 | sed -re 's/[[:space:]]+[[:digit:]]+[[:space:]]+//g'
  fi

  #Delete this command itself from the history
  myhisnum=$(history | tail -1 | grep -oP '\s\d+\s' | grep -oP '\d+'); history -d $myhisnum
}

위의 기능을 ~/.bashrc파일 에 복사하여 붙여 넣습니다 . 이 파일을 별도의 bash 스크립트 파일에 넣고 스크립트를 실행하면 history 명령이이 경우 히스토리에 액세스 할 수 없으므로 작동하지 않습니다.

마지막으로 다음과 같이 실행하십시오.

myclipcopy 3
# This copies the third-last command

또한이 기능에 추가 된 멋진 기능 중 하나는 실행 후 기록에서 자신을 삭제한다는 것입니다. 이는 명령의 "뒤로"색인이 변경되지 않기 때문에 유용합니다.


이것은 강력 하지 않습니다 .
mikeserv

@ mikeserv : 지금은 "사용자 정의 기능"으로 이름을 변경했습니다. 근데 왜 공감 했어? 이것이 질문에 올바르게 대답한다는 것을 알지 못합니까? 게다가 내가 "견고한"이라고 말한 이유는 실제로 깨지지 않아야하기 때문입니다. downvoting함으로써 당신은 게시물에서 적절한 답변을 숨기고 있습니다.
shivams 2012 년

나는 당신 이 많은 것을 생각하기 때문에 downvoted : 특히 bash와 linux는 질문에 지정되지 않았습니다. 또한 파이프 라인이 엄청나게 복잡해
졌으며

@ mikeserv : 의견 주셔서 감사합니다. 잘하면 이것이 더 나은 답변을 얻는 데 도움이 될 것입니다. 정규식과 파이프 라인이 못 생겼음을 인정합니다. 그러나 그들은 잘 테스트되었으며 사용하고 있습니다. 그리고 가정을 위해, 당신은 가장 높은 평점 대답은 사용자가 사용되었다는 가정을 촬영 한 것을 알 수 않았다 screen. 두 번째로 높은 평점 대답은 가정했다 bashlinux. 또한 bash스크립트가 zsh 또는 대부분의 다른 쉘에서 여전히 작동하기 때문에 가정하는 것이별로 중요하지 않습니다.
shivams 2016 년

나는 그것이 추악하다고 말하지 않았다-나는 그것이 너무 복잡하다고 말했다. 그리고 아닙니다 . 대부분의 다른 쉘에서는 제대로 작동하지 않습니다 . 또한 문제에 실제로 표시된 CLI 는 MySQL입니다. 그러나 다른 답변에 대해서는 좋은 지적입니다.
mikeserv

0

이 명령은 bash의 히스토리 확장을 사용하므로 !!터미널에 입력 한 마지막 행으로 확장됩니다. 당신은 아마 중 하나를 설치해야합니다 xclipxsel.

echo "!!" | xclip -selection clipboard

echo "!!" | xsel -i --clipboard

마지막 명령이 Ctrl+ v클립 보드에 저장되므로 모든 GUI 프로그램 (또는 대부분의 터미널 에뮬레이터에서 Ctrl+ Shift+ v또는 "+pvim) 에 붙여 넣을 수 있습니다 .

큰 따옴표가 포함 된 일부 줄의 경우 다음과 같습니다.

$ echo "foo;bar"
foo;bar
$ echo "!!"
echo "echo "foo;bar""
echo foo
The program 'bar' is currently not installed. You can install it by typing:
sudo apt-get install bar

그것은 당신이 예제로 준 명령에 효과가 있습니다. 큰 따옴표가 이스케이프 처리되는 경우에만 문제가 있습니다 ; & && | ||.


이 답변에 감사드립니다. 이것이 바로 구현할 수있는 가장 실용적인 솔루션이었습니다. 그리고 난 그냥 수행 "에 문제가 모든에서!를 인용하지 않음으로써 간단하게 방지 할 수 있다고 생각합니다 echo !!(이전 명령하는 황당한 경우를 제외하고는 완벽하게 작동 시작 으로 -n하거나 -e또는 그 몇 가지 다른 옵션 echo자체가 소요).
sundar-복 직원 모니카

0

아마도 가장 편리한 솔루션은 아니지만 사용하기 때문에 추가 소프트웨어를 추가로 설치하지 않아도 다른 사람들에게 도움이 될 수 있습니다.

  1. 편리한 디렉토리에서 임시 파일을 작성해야합니다.

  2. 필요한 방향이나 텍스트를 해당 파일로 전송하십시오. 방향 전환을 위해 사용할 수 있습니다

    echo $(pwd) 1> tempo
    
  3. 파일 사용 명령에서 지시를 받으려면

    cd $(tail -n 1 tempo)
    

복사 및 붙여 넣기 명령의 경우이 시스템은 물론 작동합니다. 도움이 되었으면하는 희망


편집 해 주셔서 감사합니다. 이제 대답은 더 잘 보이
드미트리 Kormulev
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.