예상되는 쉘 명령을 출력하는 쉘 스크립트가 있습니다.마우스로 복사 붙여넣기한 터미널 창에서 다른 창으로(같은 창에서 테스트할 수는 있습니다). 출력~해야 한다일반 공백 이외의 중요한 공백 문자를 포함하지 않으며 출력 라인~해야 한다소프트 줄 바꿈이 하드 줄 바꿈으로 복사되는 터미널에서도 코드가 제대로 복사될 수 있도록 잘립니다. 확실히 하고 싶습니다. 나는 다음과 같은 것을 생각하고 있습니다 :
$ 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
stdin을 클립보드로 읽어옵니다.
xsel --clipboard --output
클립보드의 내용을 stdout에 쓰기
답변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
여기서는 어떻게 작동합니까 ? 문자열이 SOME_FLAG와 일치하는 경우
H
버퍼 시계를 유지하기 위해 현재 패턴을 복사합니다. 일치하는 경우 일치하지 않는지도 확인합니다 (또한 쉘 스타일에 따라 다르며 때로는 명령이 실행 직후 기록에 이미 있는 경우도 있습니다. histry는 해당 항목을 볼 수 있습니다) 일치하면 이전 항목을 모두 삭제합니다. 마지막 SOME_FLAG 플래그 뒤에는 모든 명령이 있습니다.
/SOME_FLAG/
history
그런 다음 파이프를 통해 쉘로 보낼 수 있습니다. 예를 들면 다음과 같습니다.
history | sed -n 'H;/man/{/history/!{x;d}};${x;s/\n\s\+[0-9]*\s\+/\n/g;p}' | bash -x
불행하게도 이는 매우 위험한 방법입니다. 일부 명령을 삭제하거나 중요한 데이터를 수정하는 경우 무언가가 파괴될 수 있습니다. 그러나 마우스 시뮬레이션을 이용한 자동 복사 및 붙여넣기 방법도 유사한 피해를 입힐 수 있습니다. 그러니 이것을 조심해서 사용하세요.
또한 이 기능이 필요할 때마다 플래그를 설정해야 합니다.