명령줄의 마지막 출력을 재사용하는 방법은 무엇입니까?

명령줄의 마지막 출력을 재사용하는 방법은 무엇입니까?

콘솔의 마지막 출력을 재사용하는 방법을 알고 싶습니다. 예:

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**

답변1

히스토리 확장이 활성화되어 있고 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

답변2

아직 언급되지 않은 변수를 사용하십시오.

dir=$( python -c ... )
cd "$dir"

답변3

다른 모든 솔루션에는 워크플로우 수정 또는 명령 실행이 포함됩니다. 이는 실행이 길거나 반복 불가능한 경우(예: 파일 삭제 - 다시 실행하면 다른 결과가 생성됨)에는 적합하지 않을 수 있습니다.

필요한 경우 더 정교한 아이디어는 다음과 같습니다.

.bashrc

exec > >(tee -a ~/$$.out)

PROMPT_COMMAND='LASTLINE=$(tail -n 1 ~/$$.out)'

trap 'rm ~/$$.out' EXIT

배쉬 프롬프트

$ 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그들을 모방하다bash에서는 설명하지만 여기서 설명하는 것은 더 복잡합니다.

답변4

이 시도:

$ cd $(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")
$ pwd
/Library/Python/2.6/site-packages

관련 정보