터미널을 어떻게 시작하고 거기에 텍스트를 입력합니까?

터미널을 어떻게 시작하고 거기에 텍스트를 입력합니까?

내가 자주

  1. 기억나지 않는 명령을 터미널에 작성한 다음

  2. 를 누르기 전에 클립보드에서 경로나 파일 이름을 붙여넣으세요 Enter.

이거 재미있을 것 같았는데단축키로 첫 번째 부분을 완성하세요그런 다음 붙여넣고 키 조작을 통해 위의 목적을 달성하십시오.


기반으로"특정 항목을 붙여넣기 위해 특정 키보드 단축키를 어떻게 지정합니까?"에 대한 답변입니다.bash -c "xsel -ib <<< 'MY_COMMAND'", 명령을 클립보드로 보내는 바로가기를 추가했습니다 . 그러나 터미널에 붙여 넣으면 끝에 "Enter"(줄 바꿈)가 있으므로 명령이 자동으로 실행됩니다.

"xsel -ib <<< 'MY_COMMAND' "를 실행한 후 클립보드가 표시됩니다.


[이것은 쿠분투 20.04에 있습니다. ]

답변1

기반으로"xsel이 텍스트를 클립보드로 보내는 것을 방지하는 방법(마지막에 공백/캐리지 리턴 포함)"에 대한 답변이제 해결책이 생겼습니다. 터미널을 시작하고 새 입력(입력, 붙여넣기) 텍스트를 기다리는 방법을 모르겠습니다.단 한 번의 행동(스크립트/명령/단축키) 하지만 이제 이 작업을 수행할 수 있습니다.속도:

  1. 관련 단축키를 사용하여 bash -c 'printf "%s" "MY_TEXT" | xsel -b' ; konsole해당 텍스트를 클립보드로 보내고 터미널을 엽니다.konsole
  2. Ctrl-V 클립보드의 텍스트를 터미널에 붙여넣기(또는 Ctrl-Shift-V)

(이 두 가지 키보드 작업은 원래 질문의 1번 항목을 구현합니다. YouTube에서 오디오를 다운로드하는 것이 유용한 예입니다. (#1) bash -c 'printf "%s" "youtube-dl -f bestaudio[ext=m4a]" | xsel -b' && konsole필요한 명령을 클립보드에 복사하고 (#2) 붙여 넣을 수 있는 터미널을 엽니다. 다른 (#3) 복사 + (#4) 붙여넣기를 사용하여 YouTube 링크를 추가하는 창 - 아니면 그냥하나드래그 앤 드롭(예: #3)하고 Enter(#4/5)를 누릅니다. 실제로 아무것도 쓰지 않고 총 4~5개의 키보드 및 마우스 동작. )

나는 이것을 명령으로 구현하고 싶지만 이것이 어쨌든 (질문 본문이 아닌) 보충 답변으로 적합할 것이라고 생각합니다.

답변2

터미널을 어떻게 시작하고 거기에 텍스트를 입력합니까?

터미널에서 다음 명령을 실행하세요.

터미널에서 텍스트를 입력하거나 명령을 실행하는 것은 매우 유사합니다. 먼저 터미널을 열고 명령을 실행하는 방법을 살펴보겠습니다.

명령을 실행하려면 을 실행하면 됩니다 konsole -e MY_COMMAND.
물론 이것이 원하는 것은 아니지만 도움이 될 것입니다.
가장 먼저 말해야 할 것은 내가 본 어떤 터미널에도 공식적인 옵션은 없지만 기능에 따라 하나를 만들 konsole수 있다는 것입니다 . 현재 저는 및 를 사용하여 이 작업을 수행하는 방법만 알고 있으며, 다른 터미널 에뮬레이터를 사용하여 이 작업을 수행하는 유사한 방법이 있을 수 있습니다.konsole -e
gnome-terminalkonsole

많은 테스트를 통해 큰 문제를 발견했습니다. konsole -e명령을 실행한 후 중지됩니다. 터미널이 konsole -e sleep 1010초 동안 표시되고 konsole쉘 명령을 실행할 수 없다가 자체적으로 닫힙니다.
하지만 konsole터미널 내부에서 작업을 수행하려면 터미널이 열려 있어야 합니다. 왜 그럴까요? konsole -e top(작업 관리자) 또는 konsole -e vim(텍스트 편집기) 와 같은 일부 경우에는 의미가 있고 konsole종료 시 종료됩니다 vim( vim예를 들어 닫을 수 있는 GUI 텍스트 편집기와 같을 것입니다 gedit). 나 에게도
같은 문제가 있습니다 . 그래서 내가 봤어st -e MY_COMMANDgnome-terminal -- MY_COMMAND
이 게시물문제를 정확하게 해결합니다(단, 작동하는 경우에만 작동하므로 gnome-terminal유사한 xterm솔루션이 있을 수도 있고 없을 수도 있음 konsole).

gnome-terminal먼저 를 실행 하거나 konsole특정 작업을 수행한 후 종료되지 않는 함수를 만들어 보겠습니다 .

bash_in_gnome_terminal(){
    local IFS
    printf -v cmd %q ". ~/.bashrc; set -m; $*"
    gnome-terminal -- bash -c "bash --rcfile <(echo $cmd)"
}

bash_in_konsole(){
    local IFS
    konsole -e bash --rcfile <(printf '. ~/.bashrc; set -m; %s\n' "$*")
}

이를 테스트에 사용할 수 bash_in_konsole 'echo foo'있으며 다음과 유사한 내용이 표시됩니다.

foo
username@computer:~$

텍스트 입력 tmux:

처음에는 텍스트를 입력해야겠다고 생각했는데, xdotool창에 포커스가 맞지 않으면 문제가 좀 있습니다. konsole일반적으로 tmux사전 설치되어 있지 않습니다. Debian 기반 배포판에서 이를 설치하는 명령은 입니다 sudo apt-get install tmux. 사실 특징이 tmux있습니다 send-keys. 물론 와 함께라면 세션 tmux을 실행해야 합니다 tmux. 어쩌면 tmux먼저 설치 해야 할 수도 있습니다 . 이것이 어떻게 작동하는지 보려면 다음을 시도하십시오.

  • tmux Enter(회의를 시작합니다).

  • Ctrl-b:(명령 모드에서 입력).

  • send-keys "echo foo"Enter(입력한 대로 입력하면) 다음과 유사한 내용이 표시됩니다.

    사용자 이름@컴퓨터:~$ echo foo

이제 다음 두 부분을 병합할 수 있습니다
bash_in_konsole 'exec tmux new-session -A -t "temporary" \; run-shell "sleep .1" \; send-keys "C-u" "echo foo" "C-l"'.
나는 설명할 것이다:

  • exec터미널을 떠날 때 tmux종료됩니다 konsole.
  • new-session -A -t "temporary"이전에 이 명령을 사용한 적이 있다면 동일한 세션이 시작되지만 세션에 엄청난 숫자가 지정됩니다.
  • send-keys "echo foo"echo foo터미널에 입력됩니다.
    불행하게도 이 코드는 두 번 작성됩니다(한 번은 쉘 프롬프트 앞에, 한 번은 쉘 프롬프트 내에).
  • "C-u"이 줄은 지워집니다( -A -t "temporary"매개변수를 사용하는 경우 필요함).
  • "C-l"또한 키 누르기로 전송되며 화면을 지우는 Ctrl-l공식 단축키 입니다(두 번 표시되지 않음).bash
    echo foo
    노트: Ctrl-Alt-l일부 쉘에서도 작동합니다. 아마 bash.
  • foo키를 누를 Enter때까지 별도로 울려 퍼지지 않습니다 . 명령을 echo foo원하는 대로 수정할 수도 있습니다 .

끝에 "Enter"(줄 바꿈)가 없는 클립보드:

URL을 복사한 경우 http://youtube.com/foobar출력에는 xsel -ob후행 줄 바꿈 문자 \n(일반적으로 Enter 키를 누를 때 나타나는 문자와 동일)가 포함됩니다. 상황에 따라 다음을 수행할 수 있습니다.

  • 후행 공백 없이 첫 번째 줄만 가져옵니다.xsel -ob | head -1 | tr -d "\n"
  • 개행 대신 공백을 넣으려면: xsel -ob | tr "\n" " ".
    공간은 왜 있는 걸까요?"아무것도"대신에? 여러 URL(여러 줄)을 복사하여 youtube-dl공백으로 구분된 비디오 세트를 다운로드할 수 있기 때문입니다.

경고하다:: 귀하의 경우에는 youtube-dlYouTube의 URL을 사용하고 있으며 타임스탬프와 같은 내용이 포함될 수 있습니다. 이는 웹 브라우저에서 비디오를 시작할 때 http://youtube.com/foobar&t=21m17s비디오가 자동으로 시작된다는 것을 의미합니다 . 21:17또한 어떤 이유로든 타임스탬프가 자동으로 나타날 수 있습니다. & 기호는 분기 명령 &입니다 . 즉 , 실수로 누르면 계산이 어려워진다는 bash뜻이다 . 일반적으로 이스케이프되어 YouTube URL에 표시되는 및 등의 문자를 이스케이프하려고 할 수도 있지만 다음을 사용 하는(및 일부 다른 셸) 사용자에게만 다음 을 사용 하면 오류 메시지가 표시됩니다 .Ctrl-cEnter?=zshzsh?no matches found

  • bash, 앰퍼샌드만 이스케이프합니다: xsel -ob | tr "\n" " " | sed "s/&/\\\\&/g".
  • zsh, 문제가 있는 기호 3개를 이스케이프 처리함: xsel -ob | tr "\n" " " | sed "s/\(?\|=\|&\)/\\\\\1/g".
    노트:대부분의 경우 독자가 bash사용자라고 가정하지만 개인적으로 사용하므로 zsh대부분의 명령도 적용되어야 합니다 zsh. 다른 쉘을 사용하는 데 문제가 있으면 알려주십시오.

공식 솔루션(처음 3개 부분 병합):

0단계:나는 독자가 이 작업을 수행하기 위해 bash, konsoleyoutube-dl명령을 사용하기를 원하고 입력된 명령에 클립보드 내용이 포함되어야 한다고 가정합니다. 나는 또한 이것이 지름길이라고 가정하고 있습니다 konsole(단지 터미널에서 이것을 실행하는 다른 독자의 경우 ~/.bashrc편집 후 다시 로드해야 합니다).

1 단계 :tmux그렇지 않은 경우 설치하십시오.

2 단계:다음 7줄을 복사하여 ~/.bashrc파일에 붙여넣고 파일을 저장합니다.

bash_in_konsole(){
    local IFS
    konsole -e bash --rcfile <(printf '. ~/.bashrc; set -m; %s\n' "$*")
}

tmux_in_konsole(){
    bash_in_konsole 'exec tmux new-session -A -t "temporary" \; run-shell "sleep .1" \; send-keys "C-u" "' "$*" '" "C-l"'
}

3단계:이제 를 사용하여 테스트할 수 있습니다 tmux_in_konsole "youtube-dl -f bestaudio[ext=m4a] $(xsel -ob | tr "\n" " " | sed "s/&/\\\\&/g")". 이것은 바로 가기에 입력해야 하는 명령입니다 konsole. URL을 복사했다고 가정합니다 http://youtube.com/watch?v=foobarlorem&t=10s. 예상되는 결과는 다음과 같습니다.

username@computer:~$ youtube-dl -f bestaudio[ext=m4a] http://youtube.com/watch?v=foobarlorem\&t=10s

3-2단계:(대안 3) 클립보드 내용을 붙여넣고 싶지 않은 경우 더 쉽습니다. 를 사용하여 테스트할 수 있습니다 tmux_in_konsole "youtube-dl -f bestaudio[ext=m4a] ". 예상되는 결과는 다음과 같습니다.

username@computer:~$ youtube-dl -f bestaudio[ext=m4a] 

단계 Ω:(종료 시 konsole) 다운로드하려는 동영상의 URL을 입력하고 youtube-dl동영상 Enter다운로드가 완료되면 이 터미널을 종료할 수 있습니다.
종료하려면 tmux누르기만 하면 됩니다 Ctrl-bShift-d(쉘처럼 종료할 수도 있지만 Ctrl-d이는 tmux세션이 닫히고 다시 많은 숫자를 얻게 된다는 의미입니다). 다운로드가 완료되기 전에 실수로 닫은 경우
백그라운드에서 실행이 허용됩니다 . 하지만 의도적으로 이 작업을 수행하지 마십시오. 첫 번째 다운로드가 완료되지 않은 상태에서 두 번째 인스턴스를 실행하면 일부 문제(적어도 디스플레이 관련)가 발생할 수 있습니다.konsoletmuxtmux_in_konsole


노트:댓글의 다른 부분은 처음에 귀하의 질문을 오해하고 혼란스러워서 모두 삭제했습니다. 아직은 수정 이력을 보시면서 확인하실 수 있는 방법이 있지 않을까 싶습니다. 필요하다면 컴퓨터에도 사본을 보관합니다.
노트: 대신 개인 zsh단축키는 입니다 . 여전히 첫 번째 단축키가 표시된다면 제 부분에서 붙여넣기 오류가 발생한 것입니다. 이 댓글을 보시면 제 실수일 수도 있습니다! (그러나 이번에는 그렇지 않다)Ctrl-Alt-lCtrl-l

관련 정보