나는 쉘 명령을 출력하는 쉘 스크립트를 가지고 있습니다.마우스로 복사하여 붙여넣기한 터미널 창에서 다른 창으로(같은 창에서 테스트할 수는 있습니다). 산출~해야 한다순수 공백 이외의 중요한 공백 문자를 포함하지 않으며 출력 줄~해야 한다소프트 뉴라인을 하드 뉴라인으로 복사하는 터미널에서도 코드가 올바르게 복사되도록 잘립니다. 확실히하고 싶어. 나는 다음과 같은 것을 생각하고 있습니다 :
$ eval `resize -s 24 80`
$ reset
$ my_script
$ mouse_copy *all of the terminal history except for the first line*
$ mouse_paste
$ assert *the paste created the proper result*
가능하다면 xclip
비슷한 것으로 시뮬레이션하는 것이 좋을 것입니다.
이 스크립트는 X가 없는 사용자 정의 Linux 서버에서 실행되어야 합니다. 터미널 출력을 클라이언트에 자세히 보내는 방법을 모르지만 스크립트는 X 서버가 현재 무엇을 표시하고 있는지 클라이언트에게 물어봐야 할 수도 있습니다.
답변1
xsel
- X 선택을 조작합니다.
xsel --clipboard --input
클립보드로 표준 입력 읽기
xsel --clipboard --output
클립보드의 내용을 표준 출력에 씁니다.
답변2
귀하의 질문에 대한 나의 이해를 바탕으로 귀하가 원하는 것과 비슷한 작업을 수행해야 하는 쉘 조각(테스트되지 않음)은 다음과 같습니다.
set -e
# Collect the output of the script in a variable
script_output=$(my_script)
# Check that the script output is nice and copypastable
awk '
/[^[:print:]]/ { print NR ": non-printable character"; exit 1 }
/ $/ { print NR ": trailing whitespace"; exit 1 }
/.{79}/ { print NR ": line too long"; exit 1 }
' <<EOF
$script_output
EOF
# Use expect to spawn a shell, feed it the script output, and
# check the result against expectations
export script_output
expect <<'EOF'
spawn sh
send "[array get env script_output]\n"
expect "the proper result"
EOF
답변3
제가 이해한 바로는 세션이 시작된 후와 똑같은 순서로 명령을 다시 실행해야 합니다. 옳은?
history
따라서 여기서 명령이 유용할 수 있습니다. 실제로는 귀하에 따라 다르지만 HISTFORMAT
기본값이 있는 경우 다음과 같은 플래그 명령을 사용할 수 있습니다 echo SOME_FLAG
.
history | sed -n 'H;/SOM_FLAG/{/history/!{x;d}};${x;s/\n\s\+[0-9]*\s\+/\n/g;p}'
그러면 SOME_FLAG 이후 마지막 명령이 추출됩니다. sed
작동 방법은 다음과 같습니다.
H
버퍼를 저장하기 위해 현재 패턴을 복사하고,
/SOME_FLAG/
문자열이 SOME_FLAG와 일치하는지 모니터링하고,
그렇다면 일치하지 않는지도 확인합니다 history
(이것은 또한 쉘 문자열에 따라 다르며 때로는 명령이 다음에 실행됩니다. 이미 기록에 있으며 기록에 해당 항목이 표시됩니다)
일치하면 이전 항목을 모두 삭제합니다. 마지막 SOME_FLAG 플래그 뒤에는 모든 명령이 있습니다.
그런 다음 다음과 같이 셸에 파이프할 수 있습니다.
history | sed -n 'H;/man/{/history/!{x;d}};${x;s/\n\s\+[0-9]*\s\+/\n/g;p}' | bash -x
불행하게도 이는 매우 위험한 접근 방식입니다. 특정 명령을 사용하여 중요한 데이터를 삭제하거나 수정하면 무언가가 손상될 수 있습니다. 그러나 자동 복사 및 붙여넣기 방법을 시뮬레이션하기 위해 마우스를 사용하면 유사한 손상이 발생할 수 있습니다. 그러니 이것을 사용할 때는 주의하세요.
또한 이 기능이 필요할 때마다 플래그를 설정해야 합니다.