Bash: 각 명령의 출력을 파일로 리디렉션하는 방법은 무엇입니까?

Bash: 각 명령의 출력을 파일로 리디렉션하는 방법은 무엇입니까?

나는 종종 다음과 같이 소스 코드 저장소에서 검색을 수행합니다.

ack -l "foo bar" .

검색에는 10~60초가 소요될 수 있으며 다음과 같은 출력이 생성됩니다.

path/to/file1       
path/to/file2
path/to/file3

나는 종종 vim에 있는 모든 파일을 열 때 이 별칭을 사용합니다.

alias go='gvim `fc -s` -p'

이는 정상적으로 작동하지만 fc -s이전 명령을 다시 실행하므로 몇 초 또는 몇 분이 걸릴 수 있습니다.


대화형으로 실행하는 모든 명령에 다음과 같은 내용을 추가하면 매우 유용합니다.

| tee /tmp/lastCommand to all commands.  

이렇게 하면 출력이 유용하다고 표시되면 다른 작업을 수행할 수 있습니다.

사용 예:

유형:

find . -type f 

다음을 수행합니다.

find . -type f | tee $lastOutLocation # Where lastOutputLocation=/tmp/lastOutput

그런 다음 다음과 같이 이전 명령을 필터링할 수 있습니다.

lastOut | grep "SomeString" # Where lastOut is an alias to cat $lastOutputLocation

이와 같은 작업을 수행하는 데 사용할 수 있는 메커니즘이 있습니까? 별칭이 이러한 동작을 노출한다고 생각하지 않습니다.

잠재적인 장애물:

  • 복합 명령과 함께 사용할 수 있는 항목을 얻으세요.echo 'baz' ; echo 'bar'
  • 사용자가 입력한 명령을 실행하기 전에 수정하는 방법 파악
  • 대화형 입력과 같은 것을 무시하십시오. 비밀번호 프롬프트를 캡처하고 싶지 않음

현재 탐색 중인 가능한 솔루션은 다음과 같습니다.

  • TRAP과 shopt를 다음과 같이 사용하세요이 답변

답변1

대화형으로 실행하는 모든 명령에 다음과 같은 내용을 추가하면 매우 유용합니다.

| tee /tmp/lastCommand to all commands.  

~/.inputrc가능한 시작 중 하나는 바인딩 키를 사용하는 것입니다 . (이것은 GNU Readline 라이브러리의 구성 파일입니다.) 예를 들어 문자 o를 니모닉으로 사용하십시오.산출...

Control-o: " | tee /tmp/lastCommand"

Return/ 키 에 바인딩할 수 있지만 Enter의도하지 않은 효과가 발생할 수 있습니다.

답변2

명령 출력을 파일로 리디렉션하려는 경우 다음과 같은 방법으로 수행할 수 있습니다.

#command > output_file
Or also #command | output_file

첫 번째는 출력 채널을 변경하여 터미널에 쓰는 모든 내용이 output_file에 기록되도록 하고, 두 번째는 두 프로그램을 모두 파이프합니다...

관련 정보