콘솔의 마지막 출력을 재사용하는 방법을 알고 싶습니다.
pv-3:method Xavier$ python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
/Library/Python/2.6/site-packages
pv-3:method Xavier$ cd **LASTOUTPUT**
답변
bash 가정 :
% python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
/usr/lib/python2.7/site-packages
% cd $(!!)
cd $(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")
% pwd
/usr/lib/python2.7/site-packages
답변
아직 언급되지 않은 변수를 사용하십시오.
dir=$( python -c ... )
cd "$dir"
답변
다른 모든 솔루션은 워크 플로 수정 또는 명령 실행을 두 번 수행하는 데 시간이 오래 걸리거나 반복 할 수없는 경우에는 적합하지 않을 수 있습니다 (예 : 파일을 삭제하고 다시 실행하면 다른 결과가 생성됨).
필요한 경우 더 복잡한 아이디어가 있습니다.
.bashrc
exec > >(tee -a ~/$$.out)
PROMPT_COMMAND='LASTLINE=$(tail -n 1 ~/$$.out)'
trap 'rm ~/$$.out' EXIT
bash 프롬프트
$ python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
/usr/lib/python2.6/dist-packages
$ cd $LASTLINE
$ pwd
/usr/lib/python2.6/dist-packages
여기에는 몇 가지 문제가 있으므로 시작점으로 사용됩니다. 예를 들어 출력 파일 ( ~/<pid>.out
)이 매우 커져 디스크를 채울 수 있습니다. 또한 tee
죽으면 전체 껍질이 작동을 멈출 수 있습니다.
zsh에서 preexec
및 precmd
hook을 사용 하거나 bash에서 에뮬레이션을 사용하여 이전 명령의 출력 만 캡처하도록 수정할 수 있지만 여기서는 더 복잡합니다.
답변
전통적인 쉘을위한 작업 초안 :
ttyid=$(readlink /proc/$$/fd/1)
\___/ \______/ \___/ | | |
| | | | | \- 0: stdin
| | | | | 1: stdout <- our interest
| | | | | 2: stderr
| | | | \- fd is, maybe, filedescriptor
| | | |
| | | \- $$ is the PID of the current process (shell,
| | | in our case)
| | |
| | \- you know, much runtime stuff is here
| |
| \- readlink extracts the symbolic link of /proc/$$/fd/1
| lrwx------ 1 stefan stefan 64 2011-03-18 09:11
| /proc/22159/fd/1 -> /dev/pts/4
|
\- /dev/tty3 for real shell, /dev/pts/3 for xterm
이제 화면을 파일로 분류 할 수 있습니다. sudo가 필요합니다.
id=${ttyid//\/dev\/tty}
sudo cat /dev/vcs$id > screen.dump
Apropos screendump
: 그래서 명명 된 프로그램은 더 이상 작동하지 않습니다. 이전 커널에만 해당 될 수 있습니다. / dev / pts / N도 저에게 효과가 없었습니다. 어쩌면 당신은 / dev에서 MKDEV를 선택해야 할 /dev/cuaN
수도 있습니다.
screen.dump를 사용하는 대신 출력을 파이프하고 싶습니다. 그러나 어떻게 든 작동하지 않습니다. 때로는 ENTER를 기다립니다.
캡처는 줄 바꿈이있는 일반적인 텍스트 파일이 아니지만 한 번에 80×50 문자가 포함됩니다.
마지막 두 줄, 명령 출력 하나, 프롬프트 줄 하나를 선택하려면 되돌리고 160자를 선택한 다음 다시 되돌리고 80을 선택합니다.
rev vcs4.dat | sed 's/\(.\{160\}\).*/\1/g' | rev | sed 's/\(.\{80\}\).*/\1/g'
궁금한 점이 있으시면 왜 rev
프로그램 이 있습니까 ?
비평:
- 첫 번째 명령이 입력되어 선이 움직입니다. 글쎄-세 번째 마지막 줄이나 무언가를 선택하기위한 숫자 운동. 나는 주로 다른 창에서 일했습니다.
- 모든 사람에게 80×50 화면이있는 것은 아닙니다. 예, 우리는 알고 있습니다. 당신의 즐거움을 위해 $ COLUMNS와 $ ROWS가 있습니다.
- 출력이 항상 맨 아래에있는 것은 아닙니다. 신선하고 어린 껍질이 윗줄에있을 수 있습니다. 글쎄-간단합니다 : 실행중인 쉘을 평가하십시오. 어떤 프롬프트가 사용됩니까? 프롬프트를 감지하고 쉘 프롬프트가있는 마지막 행을 찾으십시오. before (또는 2. before) 줄은 디렉토리를 포함해야합니다.
첫 번째 다이어그램은 Explain.py 로 만들어집니다.
답변
이 시도:
$ cd $(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")
$ pwd
/Library/Python/2.6/site-packages
답변
그래서, 여기 대답이 있습니다 :
X에서 실행중인 경우 마우스로 원하는 출력을 복사하여 선택한 다음 마우스 가운데 버튼을 클릭하여 붙여 넣습니다.
텍스트 콘솔에서 실행중인 경우 gpm 과 비슷한 작업을 수행 할 수 있습니다 .
답변
(아쉽게도 실제 답변은 아니지만 여전히 궁금한 점이 있습니다. 관심있는 사람은 내가 알려줄 기능의 구현을 완료하려고 시도 할 수 있습니다.)
에서 eshell
이맥스 내부, 그들은 같은 기능을하고 싶었 있지만 (단되는 완전한 방식으로 구현 아니에요 문서에 반영 ).
예를 들면 다음과 같습니다.
~ $ pwd
~
~ $ /bin/echo $$
~
~ $ /bin/pwd
/home/imz
~ $ /bin/echo $$
~ $
알다시피, 내장의 출력 만 $$
변수 로 캡처 할 수 있습니다 .
그러나 일부 elisp 프로그래밍 ( eshell-mark-output
“esh-mode.el”의 구현 참조 )을 사용하면 마지막 출력을 “표시”하여 함수의 결과로 반환하는 함수를 구현할 수 있습니다. 요청한 eshell 명령에서 해당 함수를 사용할 수 있도록 elisp 함수는 일반적인 elisp 구문을 사용하여 eshell 명령에서 사용할 수 있습니다 (예 : 괄호).
~ $ /bin/echo (buffer-name)
*eshell*
~ $ /bin/echo (car '(a b c))
a
~ $