스크립트가 실행될 때 그 안의 명령은 stdout / stderr에 일부 텍스트를 출력 할 수 있습니다. Bash 자체도 일부 텍스트를 출력 할 수 있습니다.
그러나 동시에 몇 개의 스크립트가 실행되고있는 경우 오류가 발생한 위치를 식별하기가 어렵습니다.
그렇다면 스크립트의 모든 출력에 접두사를 삽입 할 수 있습니까? 다음과 같은 것 :
#!/bin/bash
prefix 'PREFIX' &2
echo "wrong!" >&2
그때:
$ ./script.sh
PREFIXwrong!
stderr / stdout을 선택한 접두사를 추가하는 프로세스 대체로 리디렉션 할 수 있습니다. 예를 들어 다음 스크립트는 다음과 같습니다.
#! /bin/bash
exec > >(trap "" INT TERM; sed 's/^/foo: /')
exec 2> >(trap "" INT TERM; sed 's/^/foo: (stderr) /' >&2)
echo foo
echo bar >&2
date
다음 출력을 생성합니다.
foo: foo
foo: (stderr) bar
foo: Fri Apr 27 20:04:34 IST 2018
처음 두 줄 부가 나오지 명령에 각각 표준 출력과 표준 에러로 리디렉션 foo:
및 foo: (stderr)
입력한다.
쉘 내장 명령에 대한 호출 trap
은 스크립트를 종료 할 때 Ctrl+C
또는을 SIGTERM
사용 하여 신호를 전송하여 서브 쉘이 종료되지 않도록 kill $pid
합니다. 이렇게하면 종료 신호를 받았기 때문에 종료시 stdout
파일 설명자가 사라지기 때문에 셸이 스크립트를 강제로 종료하지 않습니다 sed
. 효과적으로 메인 스크립트에서 종료 트랩을 계속 사용할 수 있으며 종료 트랩 sed
을 실행하는 동안 생성 된 출력을 처리하기 위해 계속 실행됩니다. 서브 쉘은 메인 스크립트가 끝난 후에도 종료되어야 sed
프로세스가 영원히 실행되지 않습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다