2016-09-01 2 views
0

dup/dup2 시스템 호출을 사용하여 파일로 stdout을 얻는 방법을 알고 있지만 내 터미널에 일반적으로 표시되는 전체 출력을 얻으려면 어떻게해야합니까 ($ 기호와 함께 내 사용자 이름을 나타내는 프롬프트 포함). 현재 작업 디렉토리)을 파일에 저장 하시겠습니까?터미널에서 C :를 사용하여 stdout과 프롬프트를 포함하여 모든 것을 어떻게 복사합니까?

+1

이해하기 어렵습니다. 터미널 창에서 기존 내용의 "스크린 샷"을 가져 오는 것과 같이 출력이 생성 된 후에이 작업을 수행 하시겠습니까? 프로그램이 실행되기 전에 프롬프트가 인쇄되고 프로그램이 완료 될 때까지 다시 인쇄되지 않으므로 프로그램에서 수행 할 수있는 작업은 내가 알 수있는 한 "라이브"프롬프트를 얻지 못합니다. – unwind

+0

'ls -al | sort -r'와 같은 명령을 입력하면 전체'$ lufork @ admin : ~ $ ls -al | sort -r' 것을 파일에 복사하고 싶습니다. 나는 stdout을 어떤 파일로 리디렉션함으로써 dup 시스템 호출로 명령을 거의 복사 할 수 있지만 어떻게 프롬프트를 얻을 수 있습니까? – posixKing

+2

왜? 이것은 [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)와 비슷합니다. – unwind

답변

1

예, 가능하지만 많은 세부 사항에서 어려울 수 있습니다 (전문가 수준에 따라 다름). 셸이 동작하려면 이 일반적으로 (터미널에서와 똑같습니다), 터미널 (특수 시스템 개체)과 상호 작용해야합니다. 따라서 터미널처럼 동작하는 프로그램을 만들어야합니다.이 터미널은 가상 터미널 장치 (/dev)를위한 것입니다. 이것을 구현하는 데 대한 문서를 읽으십시오. 그러나 대략적으로, 응용 프로그램은 사용자처럼 행동해야하며 의사 터미널의 슬레이브쪽에 연결하고 셸을 의사 터미널의 마스터쪽에 연결해야합니다. 그런 다음 사용자가 작성한 실제 입력을 쉽게 기록하고 쉘이 작성한 출력을 catch 할 수 있습니다.

+0

정보를 제공해 주셔서 감사합니다. 밑바닥부터 응용 프로그램과 같은 본격적인 SSH를 구축하는 데 유용한 튜토리얼이 있는지 알고 있습니까? – posixKing

+0

이것은 다른 질문 일 수 있습니다 (아마도 SO :-)에 적합하지 않을 수 있습니다. SSH (특히 인증 부분)의 기능 다이어그램을 쉽게 찾을 수 있지만 좋은 방법은 SSH 코드 소스를 보는 것입니다 (읽기 학습은 항상 올바른 방법입니다). –

1

낮은 평판의 원인을 언급 할 수 없습니다.

나는 C 언어의 코드 안에 그렇게 할 수있는 방법이 없다고 말할 것입니다. 대신에 bash를 사용하여 모든 것을 파일로 리다이렉션하고 그대로 C 코드를 남길 수 있습니다. 이렇게하면 프롬프트, 현재 디렉토리, 프로그램 호출 (플래그 포함) 및 프로그램 출력과 같은 모든 정보를 저장할 수 있습니다.

글쎄, 당신은 할 수 있습니다 :
를 (그냥 PS1을 echong 할 수있는 간단한 방법이없는 경우에 당신이 그것을 확장 할 경우) Echo expanded PS1 - 실행 명령이 :
용 - 의 bash는 PS1 메시지를 표시
: https://unix.stackexchange.com/questions/169259/how-to-capture-command-line-input-into-logfile-and-execute-it-at-the-same-time
- 표준 출력 및 오류 출력 : Redirect stderr and stdout in a Bash script

그리고 그 캡처 할 전부, 나는 생각한다.

+0

으로 옮겨야합니다. bash로도 어떻게 할 수 있습니까? – posixKing

+0

글쎄, 할 수 있습니다 : (1) bash 프롬프트 PS1 : https : // stackoverflow.echo/expanded-ps1 (에코 확장 된 PS1이라면 간단히 할 수 있습니다.) (2) 명령 실행 : https://unix.stackexchange.com/ 질문/169259/캡처하는 방법 - 명령 줄 입력 - 로그 파일에 입력 - 동시에 - (3) 표준 출력 및 오류 출력 : https://stackoverflow.com/questions/637827/redirect-stderr-and-stdout-in-a-bash-scripts 그게 전부 다 알고 싶습니다. – Franks

0

Unix 시스템에서 script 명령을 찾으십시오. 명령에 대한 모든 키보드 및 표준 입력/출력을 캡처하려면 script 실행 파일을 사용하십시오. 어떻게 완료되었는지보고 싶으면 소스를 찾아보십시오.