WSL 콘솔을 포함한 Linux 클립보드

WSL 콘솔을 포함한 Linux 클립보드

특정 Linux 콘솔에는 여러 개의 클립보드가 있다는 생각이 들었습니다.

  • 첫 번째는 bash 클립보드로, 커서 앞(U)이나 뒤(K)의 모든 줄을 클립보드로 자르는 Ctrl-U/K나 클립보드 왼쪽에 있는 단어를 자르는 Ctrl-W로 호출할 수 있습니다. 커서(해당 "오른쪽에 잘린 단어"가 있는지 여부)를 누른 다음 Ctrl-Y를 눌러 다른 곳에 붙여넣습니다.

  • pbcopy그런 다음 X 클립보드가 이렇게 구성되어 있습니다(이름 과 출처가 어디인지 는 모르겠지만 pbpaste이 이름을 수십 번 본 적이 있어서 많은 사람들이 이 명칭을 일부 사용하는 것 같습니다). 이유):

sudo apt install xclip xsel
alias pbcopy='xclip -selection clipboard'      # To use xclip for copy
alias pbpaste='xclip -selection clipboard -o'  # To use xclip for paste
alias pbcopy='xsel --clipboard --input'        # To use xsel for copy
alias pbpaste='xsel --clipboard --output'      # To use xsel for paste
  • 또한 WSL을 사용하는 경우 매우 간단하게 보낼 수 있는 Windows의 세 번째 클립보드가 있습니다 echo 123 | clip.exe. 예를 들어 반대 작업을 수행하고 WSL 콘솔에 붙여넣으려면 powershell.exe -noprofile Get-Clipboard > file.txt.

이러한 다양한 클립보드에서 정보를 쉽게 보내고/검색하는 방법을 완벽하게 제어할 수 있다면 좋을 것입니다.

  • 정보를 X 클립보드(xclip 및 xsel 사용)로 파이프할 수 있지만 내용을 bash 버퍼로 파이프하는 방법을 찾지 못했습니다. 프로그래밍 방식으로 bash 버퍼를 입력하려면 어떻게 해야 합니까?

  • 단일 명령으로 하나의 출력에서 ​​4개의 클립보드 모두로 파이프하려면 어떻게 해야 합니까(및가 독립적 xclip이라고 가정합니까?) ( 이 작업이 수행될 수 있다는 xsel것을 기억하는 것 같지만 확실하지 않습니다)? tee이를 알기 때문에 4개의 클립보드 중 어느 곳에서나 메시지를 주고받을 수 있었습니다.

echo 123 | <way-to-pipe-the-output-to-all-or-any-clipboards>

참고로 위의 질문에 대한 답변은 아니지만.https://stackoverflow.com/questions/5130968/how-can-i-copy-the-output-of-a-command-directly-into-my-clipboard

답변1

pbcopy와 pbpaste라는 이름이 어디서 왔는지 모르겠습니다.

이는 Mac의 명령줄 도구입니다.

배쉬 클립보드

이것은 실제 클립보드가 아니라 내부 버퍼입니다.독서선사용된 라이브러리 bash. 그것은 알려져있다살인 반지, emacs를 따르며 emacs와 동일하게 작동합니다. 자세한 내용은 행 읽기 섹션을 참조하세요 man bash.

그런 다음 다음과 같이 설정된 X 클립보드가 있습니다.

실제로 X 자체는기본 및 보조 옵션, X 서버가 아닌 응용 프로그램에 의해 관리되도록 선택합니다. X 클립보드가 이를 보완합니다.

설상가상으로 Gtk와 같은 라이브러리에는 자체 라이브러리가 있습니다.자신의 클립보드.

bash 버퍼에 내용을 입력하는 방법을 찾지 못했습니다.

매뉴얼 페이지에는 킬 링에서 작동하는 다양한 명령을 다시 바인딩할 수 있지만 어떤 방식으로든 킬 링을 조작하는 방법이 언급되어 있지 않습니다(적어도 제가 아는 바는 아닙니다).

4개의 클립보드 모두에 무언가를 파이프하는 방법

자신만의 명령을 작성하거나 다른 기존 명령을 사용하지 않는 한 그렇게 할 수 없습니다.

X 선택 항목과 Windows 클립보드를 동기화 상태로 유지하려면(하나를 변경하면 다른 하나도 변경됨) 이에 대한 도구를 본 것 같지만 직접 다시 검색해야 합니다.

아키텍처를 고려할 때 모든 bash 인스턴스의 종료 루프를 무언가와 동기화하는 것은 작동하지 않습니다. X 또는 Windows에서 터미널에 붙여넣는 것을 막을 수 있는 방법은 없습니다.


"그러나 Windows에서는 단일 클립보드를 사용할 수 있으므로 WSL에서도 동일한 클립보드를 사용하고 싶습니다"라고 생각하는 경우에는 작동 방식이 아닙니다.

답변2

몇 가지 질문이 있지만 요약하면 다음과 같습니다.

  • Bash(기술적으로 Readline) 킬 루프로 파이프하는 방법
  • 여러 클립보드 명령을 동시에 파이프하는 방법

Bash/Readline 종료 루프로 파이핑

Readline은 직접적인 조작 명령을 제공하지 않습니다. 문서를 보면 알 수 있듯이 rl_kill_text텍스트 입력(또는 삽입을 통해)이 필요한 rl_insert_text기능 외에 Kill Ring에 대한 API 액세스도 제공하지 않습니다 .

존재하다이론"sendkeys"와 같은 메커니즘을 사용하여 킬 링에 로드할 텍스트를 삽입한 다음 "sendkeys"를 사용할 수 있습니다 . 하지만 Windows 11의 WSLg xterm 창에서는 작동 CtrlU하지 않습니다 .xdotool

또한보십시오이 문제에 텍스트(이론적으로 제어 코드를 포함할 수 있음 CtrlU) 를 삽입하는 방법에 대한 상당히 자세한 논의가 있습니다 bash.

하지만 지금은 "아마도 가능할지도 모르지만, 내가 아는 한 아직 아무도 알아내지 못했다"고 남겨두어야겠습니다.

보너스: tmux버퍼를 붙여넣기 위한 파이프

나는 이것이 댓글에서 언급되었다는 것을 알고 있으므로 Bash/Readline 솔루션을 제공할 수 없기 때문에 추가해야겠다고 생각했습니다.

이것은 매우 간단합니다.

echo "Hello, World" | tmux load-buffer -

여러 명령으로 출력 파이프

꽤 잘 커버되어 있긴 하지만이 답변xclip구문 측면에서 파이프라인의 동작에는 약간의 미묘한 차이가 있습니다.

이 질문에 대해 허용되는 답변에 나열된 일반 구조는 다음과 같습니다.

command | tee >(pipe1) >(pipe2) >(pipe3)

xclip그러나 이러한 명령 중 하나에 관해서는 약간의 불일치가 있는 것 같습니다. 나는 이것이 xclip터미널과 런타임의 분리와 관련이 있다고 생각합니다.

해결 방법으로 파이프라인의 최종 결과를 다음으로 출력하면 됩니다 xclip.

echo "Hello, World" | tee >(clip.exe) >(tmux load-buffer -) | xclip

테스트 스크립트:

#!/usr/bin/bash
echo "1" | xclip
echo "2" | clip.exe
echo "3" | tmux load-buffer -
echo "Hello, World" | tee >(clip.exe) >(tmux load-buffer -) | xclip
xclip -o
powershell.exe -noprofile Get-Clipboard | tr -s '\r' '\n'
tmux show-buffer 

관련 정보